diff --git a/baselibs.conf b/baselibs.conf
index d2fbbdf..c7cf96d 100644
--- a/baselibs.conf
+++ b/baselibs.conf
@@ -1,4 +1,4 @@
 gnome-desktop
-libgnome-desktop-2-7
+libgnome-desktop-2-11
   obsoletes "gnome-desktop-<targettype> <= <version>"
   provides "gnome-desktop-<targettype> = <version>"
diff --git a/gnome-desktop-2.24.1.tar.bz2 b/gnome-desktop-2.24.1.tar.bz2
deleted file mode 100644
index 06c8bf1..0000000
--- a/gnome-desktop-2.24.1.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ec7beb0886dfaeebb506b2f0e6e255b4254b3ca812ab6f69a6cafb3d9e492a40
-size 1508429
diff --git a/gnome-desktop-2.25.5.tar.bz2 b/gnome-desktop-2.25.5.tar.bz2
new file mode 100644
index 0000000..290eaa7
--- /dev/null
+++ b/gnome-desktop-2.25.5.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0337976c3c557b60b9c5d49f3c0f40b7e6873a60d57910ba7d55287375b6cab9
+size 3084443
diff --git a/gnome-desktop-desktop.patch b/gnome-desktop-desktop.patch
index c0c3b18..240bad9 100644
--- a/gnome-desktop-desktop.patch
+++ b/gnome-desktop-desktop.patch
@@ -2,7 +2,7 @@ Index: gnome-about/gnome-about.desktop.in.in
 ===================================================================
 --- gnome-about/gnome-about.desktop.in.in.orig
 +++ gnome-about/gnome-about.desktop.in.in
-@@ -1,12 +1,12 @@
+@@ -1,7 +1,7 @@
  [Desktop Entry]
  Encoding=UTF-8
  _Name=About GNOME
@@ -11,9 +11,3 @@ Index: gnome-about/gnome-about.desktop.in.in
  Exec=gnome-about
  Icon=gnome-logo-icon-transparent
  Terminal=false
- Type=Application
--Categories=GNOME;GTK;Core;
-+Categories=GNOME;GTK;Core;Documentation;
- OnlyShowIn=GNOME;
- X-GNOME-Bugzilla-Bugzilla=GNOME
- X-GNOME-Bugzilla-Product=gnome-desktop
diff --git a/gnome-desktop-fate300461-desktop-gettext.patch b/gnome-desktop-fate300461-desktop-gettext.patch
index 6f698f7..e037ef2 100644
--- a/gnome-desktop-fate300461-desktop-gettext.patch
+++ b/gnome-desktop-fate300461-desktop-gettext.patch
@@ -1,18 +1,8 @@
-Add support of gettext for desktop entry files.
-
-We only support this for the following keys: Name, GenericName, Comment. We
-don't support all keys because it can create issues for the Icon key (which is
-localizable -- which can result in a broken icon).
-
-Translations that are present in the desktop entry take precedence over
-translations via gettext. If we don't do this, then user modifications won't
-appear since they will have lower precedence.
-
-Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
+Index: libgnome-desktop/gnome-desktop-item.c
 ===================================================================
---- gnome-desktop-2.23.91.orig/libgnome-desktop/gnome-desktop-item.c
-+++ gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
-@@ -84,6 +84,7 @@ struct _GnomeDesktopItem {
+--- libgnome-desktop/gnome-desktop-item.c	(révision 5293)
++++ libgnome-desktop/gnome-desktop-item.c	(copie de travail)
+@@ -81,6 +81,7 @@ struct _GnomeDesktopItem {
  	GHashTable *main_hash;
  
  	char *location;
@@ -20,16 +10,16 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
  
  	time_t mtime;
  
-@@ -139,6 +140,8 @@ static GnomeDesktopItem *gnome_desktop_i
- 
- static void update_recently_used_apps (const GnomeDesktopItem *item);
+@@ -134,6 +135,8 @@ static GnomeDesktopItem *gnome_desktop_i
+ 							    GnomeDesktopItemLoadFlags flags,
+ 							    GError **error);
  
 +static const char *lookup (const GnomeDesktopItem *item, const char *key);
 +
  static int
  readbuf_getc (ReadBuf *rb)
  {
-@@ -399,6 +402,7 @@ gnome_desktop_item_new (void)
+@@ -394,6 +397,7 @@ gnome_desktop_item_new (void)
  				       "1.0");
  
  	retval->launch_time = 0;
@@ -37,7 +27,7 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
  
  	return retval;
  }
-@@ -477,6 +481,10 @@ gnome_desktop_item_copy (const GnomeDesk
+@@ -472,6 +476,10 @@ gnome_desktop_item_copy (const GnomeDesk
  			      copy_string_hash,
  			      retval->main_hash);
  
@@ -48,7 +38,7 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
  	return retval;
  }
  
-@@ -924,6 +932,9 @@ gnome_desktop_item_unref (GnomeDesktopIt
+@@ -923,6 +931,9 @@ gnome_desktop_item_unref (GnomeDesktopIt
  	g_free (item->location);
  	item->location = NULL;
  
@@ -58,90 +48,151 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
  	g_free (item);
  }
  
-@@ -999,16 +1010,79 @@ lookup (const GnomeDesktopItem *item, co
+@@ -1011,6 +1022,71 @@ lookup_locale (const GnomeDesktopItem *i
+ }
+ 
  static const char *
- lookup_locale (const GnomeDesktopItem *item, const char *key, const char *locale)
- {
++lookup_gettext (const GnomeDesktopItem *item, const char *key)
++{
 +	const char *ret;
++	const char *msg_locale;
++	const char *value;
 +
 +	ret = NULL;
-+
- 	if (locale == NULL ||
- 	    strcmp (locale, "C") == 0) {
--		return lookup (item, key);
-+		ret = lookup (item, key);
- 	} else {
--		const char *ret;
- 		char *full = g_strdup_printf ("%s[%s]", key, locale);
- 		ret = lookup (item, full);
- 		g_free (full);
--		return ret;
- 	}
 +
 +	/* we're only interested in gettext translation if we don't have a
 +	 * translation in the .desktop file itself and if the key is one of the
 +	 * keys we know we want to translate: Name, GenericName, Comment.
 +	 * Blindly doing this for all keys can give strange result for the
 +	 * icons, since the Icon is a locale string in the spec, eg. */
-+	if (!ret && item->gettext_domain &&
-+	    (strcmp (key, GNOME_DESKTOP_ITEM_NAME) == 0 ||
-+	     strcmp (key, GNOME_DESKTOP_ITEM_GENERIC_NAME) == 0 ||
-+	     strcmp (key, GNOME_DESKTOP_ITEM_COMMENT) == 0)) {
-+		const char *msg_locale = setlocale (LC_MESSAGES, NULL);
++	if (!(item->gettext_domain &&
++	      (strcmp (key, GNOME_DESKTOP_ITEM_NAME) == 0 ||
++	       strcmp (key, GNOME_DESKTOP_ITEM_GENERIC_NAME) == 0 ||
++	       strcmp (key, GNOME_DESKTOP_ITEM_COMMENT) == 0)))
++		return NULL;
 +
-+		/* only get translation in the mo file if the requested locale
-+		 * is the LC_MESSAGES one. Ideally, we should do more and
-+		 * change LC_MESSAGES to use the requested locale, but there's
-+		 * no guarantee it's installed on the system and it might have
-+		 * some side-effects. Since this is a corner case, let's ignore
-+		 * it. */
-+		if (msg_locale && locale &&
-+		    strcmp (msg_locale, locale) == 0) {
-+			const char *value = lookup (item, key);
++	msg_locale = setlocale (LC_MESSAGES, NULL);
++	if (!msg_locale)
++		return NULL;
 +
-+			if (item->location && value != NULL && value[0] != '\0') {
-+				GFile *file;
-+				char  *basename;
++	value = lookup (item, key);
++	if (value == NULL || value[0] == '\0')
++		return NULL;
 +
-+				file = g_file_new_for_uri (item->location);
-+				basename = g_file_get_basename (file);
-+				g_object_unref (file);
++	if (item->location) {
++		GFile *file;
++		char  *basename;
 +
-+				if (basename) {
-+					char *context;
-+					char *context_value;
++		file = g_file_new_for_uri (item->location);
++		basename = g_file_get_basename (file);
++		g_object_unref (file);
 +
-+					context = g_strdup_printf ("%s(%s)", key,
-+								   basename);
-+					context_value = g_strdup_printf ("%s%s%s",
-+									 context, ": ", value);
-+					ret = g_dgettext (item->gettext_domain,
-+							  context_value);
-+					if (ret == context_value)
-+						ret = NULL;
++		if (basename) {
++			char *context;
++			char *context_value;
 +
-+					g_free (context_value);
-+					g_free (context);
-+					g_free (basename);
-+				}
-+			}
++			context = g_strdup_printf ("%s(%s)", key,
++						   basename);
++			context_value = g_strdup_printf ("%s%s%s",
++							 context, ": ", value);
++			ret = g_dgettext (item->gettext_domain,
++					  context_value);
++			if (ret == context_value)
++				ret = NULL;
 +
-+			if (!ret && value != NULL && value[0] != '\0') {
-+				ret = g_dgettext (item->gettext_domain, value);
-+				/* don't accept no translation, since we might
-+				 * have something better later, with another
-+				 * locale */
-+				if (ret == value)
-+					ret = NULL;
-+			}
++			g_free (context_value);
++			g_free (context);
++			g_free (basename);
 +		}
 +	}
 +
++	if (!ret) {
++		ret = g_dgettext (item->gettext_domain, value);
++		/* don't accept no translation */
++		if (ret == value)
++			ret = NULL;
++	}
++
++	return ret;
++}
++
++static const char *
+ lookup_best_locale (const GnomeDesktopItem *item, const char *key)
+ {
+ 	const char * const *langs_pointer;
+@@ -1020,6 +1096,14 @@ lookup_best_locale (const GnomeDesktopIt
+ 	for (i = 0; langs_pointer[i] != NULL; i++) {
+ 		const char *ret = NULL;
+ 
++		/* if we reach C, it means there were no inline translations so
++		 * far, so let's try gettext first */
++		if (strcmp (langs_pointer[i], "C") == 0) {
++			ret = lookup_gettext (item, key);
++			if (ret != NULL)
++				return ret;
++		}
++
+ 		ret = lookup_locale (item, key, langs_pointer[i]);
+ 		if (ret != NULL)
+ 			return ret;
+@@ -2946,11 +3030,21 @@ gnome_desktop_item_get_localestring_lang
+ 					  const char *attr,
+ 					  const char *language)
+ {
++	const char *msg_locale;
++	const char *ret;
++
+ 	g_return_val_if_fail (item != NULL, NULL);
+ 	g_return_val_if_fail (item->refcount > 0, NULL);
+ 	g_return_val_if_fail (attr != NULL, NULL);
+ 
+-	return lookup_locale (item, attr, language);
++	msg_locale = setlocale (LC_MESSAGES, NULL);
++
++	ret = lookup_locale (item, attr, language);
++	/* let's try gettext if the requested language is the current one */
++	if (!ret && language && strcmp (msg_locale, language))
++		ret = lookup_gettext (item, attr);
++
 +	return ret;
  }
  
- static const char *
-@@ -4039,6 +4113,10 @@ ditem_load (ReadBuf *rb,
+ /**
+@@ -2978,6 +3072,14 @@ gnome_desktop_item_get_attr_locale (cons
+ 	for (i = 0; langs_pointer[i] != NULL; i++) {
+ 		const char *value = NULL;
+ 
++		/* if we reach C, it means there were no inline translations so
++		 * far, so let's try gettext first */
++		if (strcmp (langs_pointer[i], "C") == 0) {
++			value = lookup_gettext (item, attr);
++			if (value)
++				return setlocale (LC_MESSAGES, NULL);
++		}
++
+ 		value = lookup_locale (item, attr, langs_pointer[i]);
+ 		if (value)
+ 			return langs_pointer[i];
+@@ -2998,6 +3100,9 @@ gnome_desktop_item_get_languages (const
+ 
+ 	for (li = item->languages; li != NULL; li = li->next) {
+ 		char *language = li->data;
++		/* no gettext support here: this wouldn't give us a lot. Worst
++		 * case, an desktop item editor won't see that there's a
++		 * translation for the current locale. */
+ 		if (attr == NULL ||
+ 		    lookup_locale (item, attr, language) != NULL) {
+ 			list = g_list_prepend (list, language);
+@@ -3715,6 +3820,8 @@ try_english_key (GnomeDesktopItem *item,
+ 
+ 	str = NULL;
+ 	for (i = 0; locales[i] != NULL && str == NULL; i++) {
++		/* no gettext support here: this function is for broken
++		 * .desktop files anyway */
+ 		str = g_strdup (lookup_locale (item, key, locales[i]));
+ 	}
+ 	if (str != NULL) {
+@@ -3983,6 +4090,10 @@ ditem_load (ReadBuf *rb,
  
  	readbuf_close (rb);
  
@@ -152,15 +203,15 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c
  	return item;
  }
  
-Index: gnome-desktop-2.23.91/libgnome-desktop/libgnome/gnome-desktop-item.h
+Index: libgnome-desktop/libgnome/gnome-desktop-item.h
 ===================================================================
---- gnome-desktop-2.23.91.orig/libgnome-desktop/libgnome/gnome-desktop-item.h
-+++ gnome-desktop-2.23.91/libgnome-desktop/libgnome/gnome-desktop-item.h
-@@ -98,6 +98,7 @@ typedef struct _GnomeDesktopItem GnomeDe
- #define GNOME_DESKTOP_ITEM_DOC_PATH	"X-GNOME-DocPath" /* string */
+--- libgnome-desktop/libgnome/gnome-desktop-item.h.orig
++++ libgnome-desktop/libgnome/gnome-desktop-item.h
+@@ -97,6 +97,7 @@ typedef struct _GnomeDesktopItem GnomeDe
+ #define GNOME_DESKTOP_ITEM_DOC_PATH    "X-GNOME-DocPath" /* string */
  #define GNOME_DESKTOP_ITEM_SUBSTITUTEUID "X-KDE-SubstituteUID" /*boolean*/
  #define GNOME_DESKTOP_ITEM_ROOT_ONLY     "X-KDE-RootOnly" /*boolean*/
 +#define GNOME_DESKTOP_ITEM_GETTEXT_DOMAIN "X-SUSE-Gettext-Domain" /* string */
  /* The vfolder proposal */
- #define GNOME_DESKTOP_ITEM_CATEGORIES	"Categories" /* string */
- #define GNOME_DESKTOP_ITEM_ONLY_SHOW_IN	"OnlyShowIn" /* string */
+ #define GNOME_DESKTOP_ITEM_CATEGORIES  "Categories" /* string */
+ #define GNOME_DESKTOP_ITEM_ONLY_SHOW_IN        "OnlyShowIn" /* string */
diff --git a/gnome-desktop-foreign-for-screen.patch b/gnome-desktop-foreign-for-screen.patch
deleted file mode 100644
index 4953e9d..0000000
--- a/gnome-desktop-foreign-for-screen.patch
+++ /dev/null
@@ -1,36 +0,0 @@
- libgnome-desktop/gnome-bg.c |   10 +++++++---
- 1 files changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/libgnome-desktop/gnome-bg.c b/libgnome-desktop/gnome-bg.c
-index d9d6709..c1932da 100644
---- a/libgnome-desktop/gnome-bg.c
-+++ b/libgnome-desktop/gnome-bg.c
-@@ -880,6 +880,7 @@ make_root_pixmap (GdkScreen *screen, gint width, gint height)
- 	Pixmap result;
- 	GdkPixmap *gdk_pixmap;
- 	int screen_num;
-+	int depth;
- 	
- 	screen_num = gdk_screen_get_number (screen);
- 	
-@@ -902,14 +903,17 @@ make_root_pixmap (GdkScreen *screen, gint width, gint height)
- 	
- 	XSetCloseDownMode (display, RetainPermanent);
- 	
-+	depth = DefaultDepth (display, screen_num);
-+
- 	result = XCreatePixmap (display,
- 				RootWindow (display, screen_num),
--				width, height,
--				DefaultDepth (display, screen_num));
-+				width, height, depth);
- 	
- 	XCloseDisplay (display);
- 	
--	gdk_pixmap = gdk_pixmap_foreign_new (result);
-+	gdk_pixmap = gdk_pixmap_foreign_new_for_screen (screen, result,
-+							width, height, depth);
-+
- 	gdk_drawable_set_colormap (
- 		GDK_DRAWABLE (gdk_pixmap),
- 		gdk_drawable_get_colormap (gdk_screen_get_root_window (screen)));
diff --git a/gnome-desktop-randr-gerror.diff b/gnome-desktop-randr-gerror.diff
deleted file mode 100644
index 2b4daa9..0000000
--- a/gnome-desktop-randr-gerror.diff
+++ /dev/null
@@ -1,1133 +0,0 @@
-diff --git a/libgnome-desktop/ChangeLog b/libgnome-desktop/ChangeLog
-index 747f8ae..3166b49 100644
---- a/libgnome-desktop/ChangeLog
-+++ b/libgnome-desktop/ChangeLog
-@@ -1,3 +1,43 @@
-+2008-12-12  Vincent Untz  <vuntz@gnome.org>
-+
-+	* gnome-rr-config.c: (crtc_assignment_new):
-+	* gnome-rr.c: (gnome_rr_crtc_set_config): fix translator comments, to
-+	really fix bug #563831.
-+
-+2008-12-10  Vincent Untz  <vuntz@gnome.org>
-+
-+	* gnome-rr-config.c: (has_similar_mode): kill since it's unused and
-+	creates a warning
-+
-+2008-12-10  Vincent Untz  <vuntz@gnome.org>
-+
-+	* gnome-rr-config.c: (crtc_assignment_new):
-+	* gnome-rr.c: (gnome_rr_crtc_set_config):
-+	Fix build, thanks to Frederic Peters <fpeters@0d.be> for the quick
-+	notice. Fix bug #563926 and bug #563927.
-+
-+2008-12-09  Federico Mena Quintero  <federico@novell.com>
-+
-+	Fix http://bugzilla.gnome.org/show_bug.cgi?id=563831
-+
-+	* gnome-rr.c (gnome_rr_crtc_set_config): Make an error string more
-+	friendly to translation.
-+
-+	* gnome-rr-config.c (crtc_assignment_new): Likewise.
-+
-+2008-10-16  Federico Mena Quintero  <federico@novell.com>
-+
-+	Add error reporting to the GnomeRR API.
-+
-+	* libgnomeui/gnome-rr.h (GnomeRRError): New enum with error codes
-+	for the GnomeRR API.
-+
-+	* gnome-rr.c (gnome_rr_error_quark): New public function.
-+
-+Wed Oct  8 21:05:22 2008  S�ren Sandmann  <sandmann@redhat.com>
-+
-+	* Various new RR API to support fn-F7 support
-+
- ==================== 2.24.0 ====================
- 
- 2008-09-22  Vincent Untz  <vuntz@gnome.org>
-diff --git a/libgnome-desktop/gnome-rr-config.c b/libgnome-desktop/gnome-rr-config.c
-index 4c0800a..7880c7e 100644
---- a/libgnome-desktop/gnome-rr-config.c
-+++ b/libgnome-desktop/gnome-rr-config.c
-@@ -24,6 +24,8 @@
- 
- #define GNOME_DESKTOP_USE_UNSTABLE_API
- 
-+#include <config.h>
-+#include <glib/gi18n-lib.h>
- #include <stdlib.h>
- #include <string.h>
- #include <glib.h>
-@@ -66,9 +68,11 @@ static gboolean parse_file_gmarkup (const gchar *file,
- 
- typedef struct CrtcAssignment CrtcAssignment;
- 
--static gboolean         crtc_assignment_apply (CrtcAssignment   *assign);
-+static gboolean         crtc_assignment_apply (CrtcAssignment   *assign,
-+					       GError          **error);
- static CrtcAssignment  *crtc_assignment_new   (GnomeRRScreen    *screen,
--					       GnomeOutputInfo **outputs);
-+					       GnomeOutputInfo **outputs,
-+					       GError          **error);
- static void             crtc_assignment_free  (CrtcAssignment   *assign);
- static void             output_free           (GnomeOutputInfo  *output);
- static GnomeOutputInfo *output_copy           (GnomeOutputInfo  *output);
-@@ -746,6 +750,42 @@ output_match (GnomeOutputInfo *output1, GnomeOutputInfo *output2)
-     return TRUE;
- }
- 
-+static gboolean
-+output_equal (GnomeOutputInfo *output1, GnomeOutputInfo *output2)
-+{
-+    g_assert (output1 != NULL);
-+    g_assert (output2 != NULL);
-+
-+    if (!output_match (output1, output2))
-+	return FALSE;
-+
-+    if (output1->on != output2->on)
-+	return FALSE;
-+
-+    if (output1->on)
-+    {
-+	if (output1->width != output2->width)
-+	    return FALSE;
-+	
-+	if (output1->height != output2->height)
-+	    return FALSE;
-+	
-+	if (output1->rate != output2->rate)
-+	    return FALSE;
-+	
-+	if (output1->x != output2->x)
-+	    return FALSE;
-+	
-+	if (output1->y != output2->y)
-+	    return FALSE;
-+	
-+	if (output1->rotation != output2->rotation)
-+	    return FALSE;
-+    }
-+
-+    return TRUE;
-+}
-+
- static GnomeOutputInfo *
- find_output (GnomeRRConfig *config, const char *name)
- {
-@@ -762,6 +802,9 @@ find_output (GnomeRRConfig *config, const char *name)
-     return NULL;
- }
- 
-+/* Match means "these configurations apply to the same hardware
-+ * setups"
-+ */
- gboolean
- gnome_rr_config_match (GnomeRRConfig *c1, GnomeRRConfig *c2)
- {
-@@ -780,6 +823,28 @@ gnome_rr_config_match (GnomeRRConfig *c1, GnomeRRConfig *c2)
-     return TRUE;
- }
- 
-+/* Equal means "the configurations will result in the same
-+ * modes being set on the outputs"
-+ */
-+gboolean
-+gnome_rr_config_equal (GnomeRRConfig  *c1,
-+		       GnomeRRConfig  *c2)
-+{
-+    int i;
-+
-+    for (i = 0; c1->outputs[i] != NULL; ++i)
-+    {
-+	GnomeOutputInfo *output1 = c1->outputs[i];
-+	GnomeOutputInfo *output2;
-+
-+	output2 = find_output (c2, output1->name);
-+	if (!output2 || !output_equal (output1, output2))
-+	    return FALSE;
-+    }
-+    
-+    return TRUE;
-+}
-+
- static GnomeOutputInfo **
- make_outputs (GnomeRRConfig *config)
- {
-@@ -820,12 +885,19 @@ make_outputs (GnomeRRConfig *config)
- 
- gboolean
- gnome_rr_config_applicable (GnomeRRConfig  *configuration,
--			  GnomeRRScreen       *screen)
-+			    GnomeRRScreen  *screen,
-+			    GError        **error)
- {
--    GnomeOutputInfo **outputs = make_outputs (configuration);
--    CrtcAssignment *assign = crtc_assignment_new (screen, outputs);
-+    GnomeOutputInfo **outputs;
-+    CrtcAssignment *assign;
-     gboolean result;
- 
-+    g_return_val_if_fail (configuration != NULL, FALSE);
-+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+    outputs = make_outputs (configuration);
-+    assign = crtc_assignment_new (screen, outputs, error);
-+
-     if (assign)
-     {
- 	result = TRUE;
-@@ -841,21 +913,6 @@ gnome_rr_config_applicable (GnomeRRConfig  *configuration,
-     return result;
- }
- 
--static GnomeRRConfig *
--gnome_rr_config_find (GnomeRRConfig **haystack,
--		    GnomeRRConfig  *needle)
--{
--    int i;
--
--    for (i = 0; haystack[i] != NULL; ++i)
--    {
--	if (gnome_rr_config_match (haystack[i], needle))
--	    return haystack[i];
--    }
--
--    return NULL;
--}
--
- /* Database management */
- 
- static gchar *
-@@ -992,14 +1049,19 @@ gnome_rr_config_sanitize (GnomeRRConfig *config)
- 
- 
- gboolean
--gnome_rr_config_save (GnomeRRConfig *configuration, GError **err)
-+gnome_rr_config_save (GnomeRRConfig *configuration, GError **error)
- {
-     GnomeRRConfig **configurations;
--    GString *output = g_string_new("");
-+    GString *output;
-     int i;
-     gchar *filename;
-     gboolean result;
- 
-+    g_return_val_if_fail (configuration != NULL, FALSE);
-+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+    output = g_string_new ("");
-+
-     configurations = configurations_read (NULL); /* NULL-GError */
-     
-     g_string_append_printf (output, "<monitors version=\"1\">\n");
-@@ -1020,7 +1082,7 @@ gnome_rr_config_save (GnomeRRConfig *configuration, GError **err)
-     g_string_append_printf (output, "</monitors>\n");
- 
-     filename = get_config_filename ();
--    result = g_file_set_contents (filename, output->str, -1, err);
-+    result = g_file_set_contents (filename, output->str, -1, error);
-     g_free (filename);
- 
-     if (result)
-@@ -1037,22 +1099,82 @@ gnome_rr_config_save (GnomeRRConfig *configuration, GError **err)
-     return result;
- }
- 
--static gboolean
--apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen)
-+static GnomeRRConfig *
-+gnome_rr_config_copy (GnomeRRConfig *config)
-+{
-+    GnomeRRConfig *copy = g_new0 (GnomeRRConfig, 1);
-+    int i;
-+    GPtrArray *array = g_ptr_array_new ();
-+
-+    copy->clone = config->clone;
-+    
-+    for (i = 0; config->outputs[i] != NULL; ++i)
-+	g_ptr_array_add (array, output_copy (config->outputs[i]));
-+
-+    g_ptr_array_add (array, NULL);
-+    copy->outputs = (GnomeOutputInfo **)g_ptr_array_free (array, FALSE);
-+
-+    return copy;
-+}
-+
-+GnomeRRConfig *
-+gnome_rr_config_new_stored (GnomeRRScreen *screen, GError **error)
-+{
-+    GnomeRRConfig *current;
-+    GnomeRRConfig **configs;
-+    GnomeRRConfig *result;
-+
-+    g_return_val_if_fail (screen != NULL, NULL);
-+    g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+    
-+    current = gnome_rr_config_new_current (screen);
-+    
-+    configs = configurations_read (error);
-+
-+    result = NULL;
-+    if (configs)
-+    {
-+	int i;
-+	
-+	for (i = 0; configs[i] != NULL; ++i)
-+	{
-+	    if (gnome_rr_config_match (configs[i], current))
-+	    {
-+		result = gnome_rr_config_copy (configs[i]);
-+		break;
-+	    }
-+	}
-+
-+	if (result == NULL)
-+	    g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_MATCHING_CONFIG,
-+			 _("none of the saved display configurations matched the active configuration"));
-+
-+	configurations_free (configs);
-+    }
-+
-+    gnome_rr_config_free (current);
-+    
-+    return result;
-+}
-+
-+gboolean
-+gnome_rr_config_apply (GnomeRRConfig *config,
-+		       GnomeRRScreen *screen,
-+		       GError       **error)
- {
-     CrtcAssignment *assignment;
-     GnomeOutputInfo **outputs;
-     gboolean result = FALSE;
- 
--    outputs = make_outputs (conf);
-+    outputs = make_outputs (config);
- 
--    assignment = crtc_assignment_new (screen, outputs);
-+    assignment = crtc_assignment_new (screen, outputs, error);
- 
-     outputs_free (outputs);
-     
-     if (assignment)
-     {
--	if (crtc_assignment_apply (assignment))
-+	if (crtc_assignment_apply (assignment, error))
- 	    result = TRUE;
- 	    
- 	crtc_assignment_free (assignment);
-@@ -1064,44 +1186,42 @@ apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen)
- }
- 
- gboolean
--gnome_rr_config_apply_stored (GnomeRRScreen *screen)
-+gnome_rr_config_apply_stored (GnomeRRScreen *screen, GError **error)
- {
--    GnomeRRConfig **configs;
--    GnomeRRConfig *current;
--    GnomeRRConfig *found;
--    gboolean result = TRUE;
-+    GnomeRRConfig *stored;
-+    GError *my_error;
- 
--    if (!screen)
--	return FALSE;
-+    g_return_val_if_fail (screen != NULL, FALSE);
-+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- 
--    configs = configurations_read (NULL); /* NULL-GError */
-+    my_error = NULL;
-+    if (!gnome_rr_screen_refresh (screen, &my_error)) {
-+	    if (my_error) {
-+		    g_propagate_error (error, my_error);
-+		    return FALSE; /* This is a genuine error */
-+	    }
- 
--    gnome_rr_screen_refresh (screen);
--    
--    current = gnome_rr_config_new_current (screen);
-+	    /* This means the screen didn't change, so just proceed */
-+    }
- 
--    if (configs)
-+    stored = gnome_rr_config_new_stored (screen, error);
-+
-+    if (stored)
-     {
--	if ((found = gnome_rr_config_find (configs, current)))
--	{
--	    apply_configuration (found, screen);
-+	gboolean result;
- 
--	    result = TRUE;
--	}
--	else
--	{
--	    result = FALSE;
--	}
-+	result = gnome_rr_config_apply (stored, screen, error);
-+
-+	gnome_rr_config_free (stored);
- 	
--	configurations_free (configs);
-+	return result;
-+    }
-+    else
-+    {
-+	return FALSE;
-     }
--	
--    gnome_rr_config_free (current);
--
--    return result;
- }
- 
--
- /*
-  * CRTC assignment
-  */
-@@ -1214,6 +1334,11 @@ crtc_assignment_free (CrtcAssignment *assign)
-     g_free (assign);
- }
- 
-+typedef struct {
-+    gboolean has_error;
-+    GError **error;
-+} ConfigureCrtcState;
-+
- static void
- configure_crtc (gpointer key,
- 		gpointer value,
-@@ -1221,13 +1346,19 @@ configure_crtc (gpointer key,
- {
-     GnomeRRCrtc *crtc = key;
-     CrtcInfo *info = value;
--
--    gnome_rr_crtc_set_config (crtc,
--			info->x, info->y,
--			info->mode,
--			info->rotation,
--			(GnomeRROutput **)info->outputs->pdata,
--			info->outputs->len);
-+    ConfigureCrtcState *state = data;
-+
-+    if (state->has_error)
-+	return;
-+
-+    if (!gnome_rr_crtc_set_config (crtc,
-+				   info->x, info->y,
-+				   info->mode,
-+				   info->rotation,
-+				   (GnomeRROutput **)info->outputs->pdata,
-+				   info->outputs->len,
-+				   state->error))
-+	state->has_error = TRUE;
- }
- 
- static gboolean
-@@ -1368,7 +1499,7 @@ get_required_virtual_size (CrtcAssignment *assign, int *width, int *height)
- }
- 
- static CrtcAssignment *
--crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs)
-+crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs, GError **error)
- {
-     CrtcAssignment *assignment = g_new0 (CrtcAssignment, 1);
- 
-@@ -1388,6 +1519,15 @@ crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs)
- 	if (width < min_width || width > max_width ||
- 	    height < min_height || height > max_height)
- 	{
-+	    g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_BOUNDS_ERROR,
-+			 /* Translators: the "requested", "minimum", and
-+			  * "maximum" words here are not keywords; please
-+			  * translate them as usual. */
-+			 _("required virtual size does not fit available size: "
-+			   "requested=(%d, %d), minimum=(%d, %d), maximum=(%d, %d)"),
-+			 width, height,
-+			 min_width, min_height,
-+			 max_width, max_height);
- 	    goto fail;
- 	}
- 
-@@ -1395,6 +1535,9 @@ crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs)
- 	
- 	return assignment;
-     }
-+    else
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_CRTC_ASSIGNMENT,
-+		     _("could not find a suitable configuration of screens"));
-     
- fail:
-     crtc_assignment_free (assignment);
-@@ -1403,7 +1546,7 @@ fail:
- }
- 
- static gboolean
--crtc_assignment_apply (CrtcAssignment *assign)
-+crtc_assignment_apply (CrtcAssignment *assign, GError **error)
- {
-     GnomeRRCrtc **all_crtcs = gnome_rr_screen_list_crtcs (assign->screen);
-     int width, height;
-@@ -1425,6 +1568,8 @@ crtc_assignment_apply (CrtcAssignment *assign)
-     width = MIN (max_width, width);
-     height = MAX (min_height, height);
-     height = MIN (max_height, height);
-+
-+    /* FMQ: do we need to check the sizes instead of clamping them? */
-     
-     /* Turn off all crtcs that are currently displaying outside the new screen,
-      * or are not used in the new setup
-@@ -1452,7 +1597,7 @@ crtc_assignment_apply (CrtcAssignment *assign)
- 	    
- 	    if (x + w > width || y + h > height || !g_hash_table_lookup (assign->info, crtc))
- 	    {
--		if (!gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0))
-+		if (!gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0, error))
- 		{
- 		    success = FALSE;
- 		    break;
-@@ -1473,9 +1618,16 @@ crtc_assignment_apply (CrtcAssignment *assign)
- 
-     if (success)
-     {
-+	ConfigureCrtcState state;
-+
- 	gnome_rr_screen_set_size (assign->screen, width, height, width_mm, height_mm);
-+
-+	state.has_error = FALSE;
-+	state.error = error;
- 	
--	g_hash_table_foreach (assign->info, configure_crtc, NULL);
-+	g_hash_table_foreach (assign->info, configure_crtc, &state);
-+
-+	success = !state.has_error;
-     }
- 
-     return success;
-diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c
-index 6a37d32..109b89e 100644
---- a/libgnome-desktop/gnome-rr.c
-+++ b/libgnome-desktop/gnome-rr.c
-@@ -24,6 +24,8 @@
- 
- #define GNOME_DESKTOP_USE_UNSTABLE_API
- 
-+#include <config.h>
-+#include <glib/gi18n-lib.h>
- #include "libgnomeui/gnome-rr.h"
- #include <string.h>
- #include <X11/Xlib.h>
-@@ -50,6 +52,8 @@ struct ScreenInfo
-     GnomeRRMode **	modes;
-     
-     GnomeRRScreen *	screen;
-+
-+    GnomeRRMode **	clone_modes;
- };
- 
- struct GnomeRRScreen
-@@ -118,14 +122,16 @@ struct GnomeRRMode
- static GnomeRRCrtc *  crtc_new          (ScreenInfo         *info,
- 					 RRCrtc              id);
- static void           crtc_free         (GnomeRRCrtc        *crtc);
--static void           crtc_initialize   (GnomeRRCrtc        *crtc,
--					 XRRScreenResources *res);
-+static gboolean       crtc_initialize   (GnomeRRCrtc        *crtc,
-+					 XRRScreenResources *res,
-+					 GError            **error);
- 
- /* GnomeRROutput */
- static GnomeRROutput *output_new        (ScreenInfo         *info,
- 					 RROutput            id);
--static void           output_initialize (GnomeRROutput      *output,
--					 XRRScreenResources *res);
-+static gboolean       output_initialize (GnomeRROutput      *output,
-+					 XRRScreenResources *res,
-+					 GError            **error);
- static void           output_free       (GnomeRROutput      *output);
- 
- /* GnomeRRMode */
-@@ -136,6 +142,22 @@ static void           mode_initialize   (GnomeRRMode        *mode,
- static void           mode_free         (GnomeRRMode        *mode);
- 
- 
-+/* Errors */
-+
-+/**
-+ * gnome_rr_error_quark:
-+ *
-+ * Returns the #GQuark that will be used for #GError values returned by the
-+ * GnomeRR API.
-+ *
-+ * Return value: a #GQuark used to identify errors coming from the GnomeRR API.
-+ */
-+GQuark
-+gnome_rr_error_quark (void)
-+{
-+    return g_quark_from_static_string ("gnome-rr-error-quark");
-+}
-+
- /* Screen */
- static GnomeRROutput *
- gnome_rr_output_by_id (ScreenInfo *info, RROutput id)
-@@ -222,14 +244,90 @@ screen_info_free (ScreenInfo *info)
- 	    mode_free (*mode);
- 	g_free (info->modes);
-     }
-+
-+    if (info->clone_modes)
-+    {
-+	/* The modes themselves were freed above */
-+	g_free (info->clone_modes);
-+    }
-     
-     g_free (info);
- }
- 
- static gboolean
-+has_similar_mode (GnomeRROutput *output, GnomeRRMode *mode)
-+{
-+    int i;
-+    GnomeRRMode **modes = gnome_rr_output_list_modes (output);
-+    int width = gnome_rr_mode_get_width (mode);
-+    int height = gnome_rr_mode_get_height (mode);
-+
-+    for (i = 0; modes[i] != NULL; ++i)
-+    {
-+	GnomeRRMode *m = modes[i];
-+
-+	if (gnome_rr_mode_get_width (m) == width	&&
-+	    gnome_rr_mode_get_height (m) == height)
-+	{
-+	    return TRUE;
-+	}
-+    }
-+
-+    return FALSE;
-+}
-+
-+static void
-+gather_clone_modes (ScreenInfo *info)
-+{
-+    int i;
-+    GPtrArray *result = g_ptr_array_new ();
-+
-+    for (i = 0; info->outputs[i] != NULL; ++i)
-+    {
-+	int j;
-+	GnomeRROutput *output1, *output2;
-+
-+	output1 = info->outputs[i];
-+	
-+	if (!output1->connected)
-+	    continue;
-+	
-+	for (j = 0; output1->modes[j] != NULL; ++j)
-+	{
-+	    GnomeRRMode *mode = output1->modes[j];
-+	    gboolean valid;
-+	    int k;
-+
-+	    valid = TRUE;
-+	    for (k = 0; info->outputs[k] != NULL; ++k)
-+	    {
-+		output2 = info->outputs[k];
-+		
-+		if (!output2->connected)
-+		    continue;
-+		
-+		if (!has_similar_mode (output2, mode))
-+		{
-+		    valid = FALSE;
-+		    break;
-+		}
-+	    }
-+
-+	    if (valid)
-+		g_ptr_array_add (result, mode);
-+	}
-+    }
-+
-+    g_ptr_array_add (result, NULL);
-+    
-+    info->clone_modes = (GnomeRRMode **)g_ptr_array_free (result, FALSE);
-+}
-+
-+static gboolean
- fill_out_screen_info (Display *xdisplay,
- 		      Window xroot,
--		      ScreenInfo *info)
-+		      ScreenInfo *info,
-+		      GError **error)
- {
-     XRRScreenResources *resources;
-     
-@@ -244,14 +342,18 @@ fill_out_screen_info (Display *xdisplay,
-                                 &(info->max_width),
-                                 &(info->max_height))) {
-         /* XRR caught an error */
--        return False;
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR,
-+		     _("could not get the range of screen sizes"));
-+        return FALSE;
-     }
-     
-     gdk_flush ();
-     if (gdk_error_trap_pop ())
-     {
-         /* Unhandled X Error was generated */
--        return False;
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_UNKNOWN,
-+		     _("unhandled X error while getting the range of screen sizes"));
-+        return FALSE;
-     }
-     
- #if 0
-@@ -311,10 +413,16 @@ fill_out_screen_info (Display *xdisplay,
- 	
- 	/* Initialize */
- 	for (crtc = info->crtcs; *crtc; ++crtc)
--	    crtc_initialize (*crtc, resources);
-+	{
-+	    if (!crtc_initialize (*crtc, resources, error))
-+		return FALSE;
-+	}
- 	
- 	for (output = info->outputs; *output; ++output)
--	    output_initialize (*output, resources);
-+	{
-+	    if (!output_initialize (*output, resources, error))
-+		return FALSE;
-+	}
- 	
- 	for (i = 0; i < resources->nmode; ++i)
- 	{
-@@ -322,6 +430,8 @@ fill_out_screen_info (Display *xdisplay,
- 	    
- 	    mode_initialize (mode, &(resources->modes[i]));
- 	}
-+
-+	gather_clone_modes (info);
- 	
- 	return TRUE;
-     }
-@@ -330,13 +440,14 @@ fill_out_screen_info (Display *xdisplay,
- #if 0
- 	g_print ("Couldn't get screen resources\n");
- #endif
--	
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR,
-+		     _("could not get the screen resources (CRTCs, outputs, modes)"));
- 	return FALSE;
-     }
- }
- 
- static ScreenInfo *
--screen_info_new (GnomeRRScreen *screen)
-+screen_info_new (GnomeRRScreen *screen, GError **error)
- {
-     ScreenInfo *info = g_new0 (ScreenInfo, 1);
-     
-@@ -347,36 +458,36 @@ screen_info_new (GnomeRRScreen *screen)
-     info->modes = NULL;
-     info->screen = screen;
-     
--    if (fill_out_screen_info (screen->xdisplay, screen->xroot, info))
-+    if (fill_out_screen_info (screen->xdisplay, screen->xroot, info, error))
-     {
- 	return info;
-     }
-     else
-     {
--	g_free (info);
-+	screen_info_free (info);
- 	return NULL;
-     }
- }
- 
- static gboolean
--screen_update (GnomeRRScreen *screen, gboolean force_callback)
-+screen_update (GnomeRRScreen *screen, gboolean force_callback, GError **error)
- {
-     ScreenInfo *info;
-     gboolean changed = FALSE;
-     
-     g_assert (screen != NULL);
--    
--    info = screen_info_new (screen);
--    if (info)
--    {
--	if (info->resources->configTimestamp != screen->info->resources->configTimestamp)
-+
-+    info = screen_info_new (screen, error);
-+    if (!info)
-+	    return FALSE;
-+
-+    if (info->resources->configTimestamp != screen->info->resources->configTimestamp)
- 	    changed = TRUE;
- 	
--	screen_info_free (screen->info);
-+    screen_info_free (screen->info);
- 	
--	screen->info = info;
--    }
--    
-+    screen->info = info;
-+
-     if ((changed || force_callback) && screen->callback)
- 	screen->callback (screen, screen->data);
-     
-@@ -404,7 +515,7 @@ screen_on_event (GdkXEvent *xevent,
- 	/* FIXME: we may need to be more discriminating in
- 	 * what causes 'changed' events
- 	 */
--	screen_update (screen, TRUE);
-+	screen_update (screen, TRUE, NULL); /* NULL-GError */
-     }
-     
-     /* Pass the event on to GTK+ */
-@@ -417,11 +528,14 @@ screen_on_event (GdkXEvent *xevent,
- GnomeRRScreen *
- gnome_rr_screen_new (GdkScreen *gdk_screen,
- 		     GnomeRRScreenChanged callback,
--		     gpointer data)
-+		     gpointer data,
-+		     GError **error)
- {
-     Display *dpy = GDK_SCREEN_XDISPLAY (gdk_screen);
-     int event_base;
-     int ignore;
-+
-+    g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-     
-     if (XRRQueryExtension (dpy, &event_base, &ignore))
-     {
-@@ -438,7 +552,7 @@ gnome_rr_screen_new (GdkScreen *gdk_screen,
- 	
- 	screen->randr_event_base = event_base;
- 	
--	screen->info = screen_info_new (screen);
-+	screen->info = screen_info_new (screen, error);
- 	
- 	if (!screen->info) {
- 	    g_free (screen);
-@@ -459,8 +573,13 @@ gnome_rr_screen_new (GdkScreen *gdk_screen,
- 	gdk_window_add_filter (screen->gdk_root, screen_on_event, screen);
- 	return screen;
-     }
--    
--    return NULL;
-+    else
-+    {
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_RANDR_EXTENSION,
-+		     _("RANDR extension is not present"));
-+	
-+	return NULL;
-+   }
- }
- 
- void
-@@ -511,10 +630,25 @@ gnome_rr_screen_get_ranges (GnomeRRScreen *screen,
- 	*max_height = screen->info->max_height;
- }
- 
-+/**
-+ * gnome_rr_screen_refresh
-+ * @screen: a #GnomeRRScreen
-+ * @error: location to store error, or %NULL
-+ *
-+ * Refreshes the screen configuration, and calls the screen's callback if it
-+ * exists and if the screen's configuration changed.
-+ *
-+ * Return value: TRUE if the screen's configuration changed; otherwise, the
-+ * function returns FALSE and a NULL error if the configuration didn't change,
-+ * or FALSE and a non-NULL error if there was an error while refreshing the
-+ * configuration.
-+ */
- gboolean
--gnome_rr_screen_refresh (GnomeRRScreen *screen)
-+gnome_rr_screen_refresh (GnomeRRScreen *screen,
-+			 GError       **error)
- {
--    return screen_update (screen, FALSE);
-+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+    return screen_update (screen, FALSE, error);
- }
- 
- GnomeRRMode **
-@@ -526,6 +660,15 @@ gnome_rr_screen_list_modes (GnomeRRScreen *screen)
-     return screen->info->modes;
- }
- 
-+GnomeRRMode **
-+gnome_rr_screen_list_clone_modes   (GnomeRRScreen *screen)
-+{
-+    g_return_val_if_fail (screen != NULL, NULL);
-+    g_return_val_if_fail (screen->info != NULL, NULL);
-+
-+    return screen->info->clone_modes;
-+}
-+
- GnomeRRCrtc **
- gnome_rr_screen_list_crtcs (GnomeRRScreen *screen)
- {
-@@ -647,8 +790,8 @@ read_edid_data (GnomeRROutput *output)
-     return NULL;
- }
- 
--static void
--output_initialize (GnomeRROutput *output, XRRScreenResources *res)
-+static gboolean
-+output_initialize (GnomeRROutput *output, XRRScreenResources *res, GError **error)
- {
-     XRROutputInfo *info = XRRGetOutputInfo (
- 	DISPLAY (output), res, output->id);
-@@ -661,8 +804,11 @@ output_initialize (GnomeRROutput *output, XRRScreenResources *res)
-     
-     if (!info || !output->info)
-     {
--	/* FIXME */
--	return;
-+	/* FIXME: see the comment in crtc_initialize() */
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR,
-+		     _("could not get information about output %d"),
-+		     (int) output->id);
-+	return FALSE;
-     }
-     
-     output->name = g_strdup (info->name); /* FIXME: what is nameLen used for? */
-@@ -714,6 +860,8 @@ output_initialize (GnomeRROutput *output, XRRScreenResources *res)
-     output->edid_data = read_edid_data (output);
-     
-     XRRFreeOutputInfo (info);
-+
-+    return TRUE;
- }
- 
- static void
-@@ -927,22 +1075,38 @@ gnome_rr_crtc_set_config (GnomeRRCrtc      *crtc,
- 			  GnomeRRMode      *mode,
- 			  GnomeRRRotation   rotation,
- 			  GnomeRROutput   **outputs,
--			  int               n_outputs)
-+			  int               n_outputs,
-+			  GError          **error)
- {
-     ScreenInfo *info;
-     GArray *output_ids;
-+    Status status;
-     gboolean result;
-     int i;
-     
-     g_return_val_if_fail (crtc != NULL, FALSE);
-     g_return_val_if_fail (mode != NULL || outputs == NULL || n_outputs == 0, FALSE);
-+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-     
-     info = crtc->info;
-     
-     if (mode)
-     {
--	g_return_val_if_fail (x + mode->width <= info->max_width, FALSE);
--	g_return_val_if_fail (y + mode->height <= info->max_height, FALSE);
-+	if (x + mode->width > info->max_width
-+	    || y + mode->height > info->max_height)
-+	{
-+	    g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_BOUNDS_ERROR,
-+			 /* Translators: the "position", "size", and "maximum"
-+			  * words here are not keywords; please translate them
-+			  * as usual.  */
-+			 _("requested position/size for CRTC %d is outside the allowed limit: "
-+			   "position=(%d, %d), size=(%d, %d), maximum=(%d, %d)"),
-+			 (int) crtc->id,
-+			 x, y,
-+			 mode->width, mode->height,
-+			 info->max_width, info->max_height);
-+	    return FALSE;
-+	}
-     }
-     
-     output_ids = g_array_new (FALSE, FALSE, sizeof (RROutput));
-@@ -953,15 +1117,24 @@ gnome_rr_crtc_set_config (GnomeRRCrtc      *crtc,
- 	    g_array_append_val (output_ids, outputs[i]->id);
-     }
-     
--    result = XRRSetCrtcConfig (DISPLAY (crtc), info->resources, crtc->id,
-+    status = XRRSetCrtcConfig (DISPLAY (crtc), info->resources, crtc->id,
- 			       CurrentTime, 
- 			       x, y,
- 			       mode ? mode->id : None,
- 			       xrotation_from_rotation (rotation),
- 			       (RROutput *)output_ids->data,
--			       output_ids->len) == RRSetConfigSuccess;
-+			       output_ids->len);
-     
-     g_array_free (output_ids, TRUE);
-+
-+    if (status == RRSetConfigSuccess)
-+	result = TRUE;
-+    else {
-+	result = FALSE;
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR,
-+		     _("could not set the configuration for CRTC %d"),
-+		     (int) crtc->id);
-+    }
-     
-     return result;
- }
-@@ -1049,9 +1222,10 @@ crtc_new (ScreenInfo *info, RROutput id)
-     return crtc;
- }
- 
--static void
-+static gboolean
- crtc_initialize (GnomeRRCrtc        *crtc,
--		 XRRScreenResources *res)
-+		 XRRScreenResources *res,
-+		 GError            **error)
- {
-     XRRCrtcInfo *info = XRRGetCrtcInfo (DISPLAY (crtc), res, crtc->id);
-     GPtrArray *a;
-@@ -1064,7 +1238,12 @@ crtc_initialize (GnomeRRCrtc        *crtc,
-     if (!info)
-     {
- 	/* FIXME: We need to reaquire the screen resources */
--	return;
-+	/* FIXME: can we actually catch BadRRCrtc, and does it make sense to emit that? */
-+
-+	g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR,
-+		     _("could not get information about CRTC %d"),
-+		     (int) crtc->id);
-+	return FALSE;
-     }
-     
-     /* GnomeRRMode */
-@@ -1102,6 +1281,8 @@ crtc_initialize (GnomeRRCrtc        *crtc,
-     crtc->rotations = gnome_rr_rotation_from_xrotation (info->rotations);
-     
-     XRRFreeCrtcInfo (info);
-+
-+    return TRUE;
- }
- 
- static void
-diff --git a/libgnome-desktop/libgnomeui/gnome-rr-config.h b/libgnome-desktop/libgnomeui/gnome-rr-config.h
-index 6a8302d..a59db55 100644
---- a/libgnome-desktop/libgnomeui/gnome-rr-config.h
-+++ b/libgnome-desktop/libgnomeui/gnome-rr-config.h
-@@ -34,6 +34,13 @@
- typedef struct GnomeOutputInfo GnomeOutputInfo;
- typedef struct GnomeRRConfig GnomeRRConfig;
- 
-+/* FIXME:
-+ *
-+ * This structure is a Frankenstein monster where all of the fields
-+ * are generated by the system, but some of them can be changed by
-+ * the client.
-+ */
-+
- struct GnomeOutputInfo
- {
-     char *		name;
-@@ -66,14 +73,28 @@ struct GnomeRRConfig
- };
- 
- GnomeRRConfig  *gnome_rr_config_new_current  (GnomeRRScreen  *screen);
-+GnomeRRConfig  *gnome_rr_config_new_stored   (GnomeRRScreen  *screen,
-+					      GError        **error);
- void            gnome_rr_config_free         (GnomeRRConfig  *configuration);
- gboolean        gnome_rr_config_match        (GnomeRRConfig  *config1,
- 					      GnomeRRConfig  *config2);
-+gboolean        gnome_rr_config_equal	     (GnomeRRConfig  *config1,
-+					      GnomeRRConfig  *config2);
- gboolean        gnome_rr_config_save         (GnomeRRConfig  *configuration,
--					      GError        **err);
-+					      GError        **error);
- void            gnome_rr_config_sanitize     (GnomeRRConfig  *configuration);
--gboolean        gnome_rr_config_apply_stored (GnomeRRScreen  *screen);
-+gboolean	gnome_rr_config_apply        (GnomeRRConfig  *configuration,
-+					      GnomeRRScreen  *screen,
-+					      GError        **error);
-+gboolean        gnome_rr_config_apply_stored (GnomeRRScreen  *screen,
-+					      GError        **error);
- gboolean        gnome_rr_config_applicable   (GnomeRRConfig  *configuration,
--					      GnomeRRScreen  *screen);
-+					      GnomeRRScreen  *screen,
-+					      GError        **error);
-+
-+/* A utility function that isn't really in the spirit of this file, but I don't
-+ * don't know a better place for it.
-+ */
-+GnomeRRMode **gnome_rr_create_clone_modes (GnomeRRScreen *screen);
- 
- #endif
-diff --git a/libgnome-desktop/libgnomeui/gnome-rr.h b/libgnome-desktop/libgnomeui/gnome-rr.h
-index 01b4f45..38b1af8 100644
---- a/libgnome-desktop/libgnomeui/gnome-rr.h
-+++ b/libgnome-desktop/libgnomeui/gnome-rr.h
-@@ -48,14 +48,31 @@ typedef enum
-     GNOME_RR_REFLECT_Y =	(1 << 5)
- } GnomeRRRotation;
- 
-+/* Error codes */
-+
-+#define GNOME_RR_ERROR (gnome_rr_error_quark ())
-+
-+GQuark gnome_rr_error_quark (void);
-+
-+typedef enum {
-+    GNOME_RR_ERROR_UNKNOWN,		/* generic "fail" */
-+    GNOME_RR_ERROR_NO_RANDR_EXTENSION,	/* RANDR extension is not present */
-+    GNOME_RR_ERROR_RANDR_ERROR,		/* generic/undescribed error from the underlying XRR API */
-+    GNOME_RR_ERROR_BOUNDS_ERROR,	/* requested bounds of a CRTC are outside the maximum size */
-+    GNOME_RR_ERROR_CRTC_ASSIGNMENT,	/* could not assign CRTCs to outputs */
-+    GNOME_RR_ERROR_NO_MATCHING_CONFIG,	/* none of the saved configurations matched the current configuration */
-+} GnomeRRError;
-+
- /* GnomeRRScreen */
- GnomeRRScreen * gnome_rr_screen_new                (GdkScreen             *screen,
- 						    GnomeRRScreenChanged   callback,
--						    gpointer               data);
-+						    gpointer               data,
-+						    GError               **error);
- void            gnome_rr_screen_destroy            (GnomeRRScreen         *screen);
- GnomeRROutput **gnome_rr_screen_list_outputs       (GnomeRRScreen         *screen);
- GnomeRRCrtc **  gnome_rr_screen_list_crtcs         (GnomeRRScreen         *screen);
- GnomeRRMode **  gnome_rr_screen_list_modes         (GnomeRRScreen         *screen);
-+GnomeRRMode **  gnome_rr_screen_list_clone_modes   (GnomeRRScreen	  *screen);
- void            gnome_rr_screen_set_size           (GnomeRRScreen         *screen,
- 						    int                    width,
- 						    int                    height,
-@@ -63,7 +80,8 @@ void            gnome_rr_screen_set_size           (GnomeRRScreen         *scree
- 						    int                    mm_height);
- GnomeRRCrtc *   gnome_rr_screen_get_crtc_by_id     (GnomeRRScreen         *screen,
- 						    guint32                id);
--gboolean        gnome_rr_screen_refresh            (GnomeRRScreen         *screen);
-+gboolean        gnome_rr_screen_refresh            (GnomeRRScreen         *screen,
-+						    GError               **error);
- GnomeRROutput * gnome_rr_screen_get_output_by_id   (GnomeRRScreen         *screen,
- 						    guint32                id);
- GnomeRROutput * gnome_rr_screen_get_output_by_name (GnomeRRScreen         *screen,
-@@ -109,7 +127,8 @@ gboolean        gnome_rr_crtc_set_config           (GnomeRRCrtc           *crtc,
- 						    GnomeRRMode           *mode,
- 						    GnomeRRRotation        rotation,
- 						    GnomeRROutput        **outputs,
--						    int                    n_outputs);
-+						    int                    n_outputs,
-+						    GError               **error);
- gboolean        gnome_rr_crtc_can_drive_output     (GnomeRRCrtc           *crtc,
- 						    GnomeRROutput         *output);
- GnomeRRMode *   gnome_rr_crtc_get_current_mode     (GnomeRRCrtc           *crtc);
-diff --git a/po/POTFILES.in b/po/POTFILES.in
-index 3bf18ac..84c9122 100644
---- a/po/POTFILES.in
-+++ b/po/POTFILES.in
-@@ -7,3 +7,5 @@ libgnome-desktop/display-name.c
- libgnome-desktop/gnome-desktop-item.c
- libgnome-desktop/gnome-ditem-edit.c
- libgnome-desktop/gnome-hint.c
-+libgnome-desktop/gnome-rr.c
-+libgnome-desktop/gnome-rr-config.c
diff --git a/gnome-desktop.changes b/gnome-desktop.changes
index 7687ad6..7e65291 100644
--- a/gnome-desktop.changes
+++ b/gnome-desktop.changes
@@ -1,9 +1,52 @@
+-------------------------------------------------------------------
+Sun Feb  1 15:46:02 EST 2009 - mboman@suse.de
+
+- Update to version 2.25.5:
+  + GnomeBG: use gdk_color_equal() instead of custom function
+  + GnomeRR: use XRRGetScreenResourcesCurrent instead of
+    XRRGetScreenResources when available (xrandr 1.3) because it's
+    cheaper
+  + GnomeBG: emit "transitioned" signal instead of "changed" signal for
+    new frames in a slideshow background
+  + GnomeBG: reorganize code a bit
+  + GnomeBG: add fading API to support fading between two backgrounds
+  + Translation updates
+
+-------------------------------------------------------------------
+Sun Feb  1 02:10:51 CET 2009 - vuntz@novell.com
+
+- Update gnome-desktop-fate300461-desktop-gettext.patch: the inline
+  translations were ignored if they were not matching the first
+  language returned by g_get_language_names(), and gettext was
+  used. This was not the intended behavior, and made it impossible
+  to customize the name/comment of a launcher, eg.
+
+-------------------------------------------------------------------
+Fri Jan 23 16:56:13 CET 2009 - vuntz@novell.com
+
+- Remove static libraries.
+- Remove part of gnome-desktop-desktop.patch that is already
+  handled with %suse_update_desktop_file
+- Sanitize BuildRequires and Requires.
+- Minor tweaks.
+
+-------------------------------------------------------------------
+Fri Jan 23 04:10:09 CET 2009 - vuntz@novell.com
+
+- Really drop gnome-desktop-foreign-for-screen.patch, fixed
+  upstream.
+
 -------------------------------------------------------------------
 Sat Jan 17 02:59:53 CET 2009 - crrodriguez@suse.de
 
 - remove "la" files, baby step to clean up all references
   to libavahi-*.la
 
+-------------------------------------------------------------------
+Sat Jan 10 13:54:07 CST 2009 - mboman@suse.de
+
+- Remove gnome-desktop-randr-gerror.diff. Fixed upstream
+
 -------------------------------------------------------------------
 Fri Jan  9 13:54:07 CST 2009 - federico@novell.com
 
@@ -14,6 +57,41 @@ Fri Jan  9 13:54:07 CST 2009 - federico@novell.com
 - Removed gnome-desktop-randr-cloned-outputs.diff, as it is already
   part of the patch above.
 
+-------------------------------------------------------------------
+Tue Jan  6 13:25:52 EST 2009 - mboman@suse.de
+
+- Update to version 2.25.4:
+  + Translation updates
+
+-------------------------------------------------------------------
+Sat Dec 20 10:08:21 EST 2008 - mboman@suse.de
+
+- Update to version 2.25.3:
+  + libgnome-desktop
+    - GnomeRR: plug leaks
+    - GnomeRR: add API-breaking error reporting API
+    - GnomeBG: fix potential crash with some empty slideshow
+    - Build fixes
+  + Translation updates
+
+-------------------------------------------------------------------
+Sun Dec 14 11:03:00 EST 2008 - mboman@suse.de
+
+- Update to version 2.25.2:
+  + libgnome-desktop
+    - GnomeDesktopThumbnail: reenable check for preview::icon
+    - GnomeRR: add Lenovo display name
+    - GnomeBG: plug a leak
+    - GnomeDesktopThumbnail: fix potential crash when a temporary file
+      cannot be created
+  + Misc
+    - Require glib 2.19.1
+    - Update a bit API documentation
+    - Require GTK+ 2.14.0
+  + Translation updates 
+- Remove icon-search-path.dif. Not valid due to API/ABI changes
+- Remove gnome-desktop-randr-cloned-outputs.diff. Fixed upstream
+
 -------------------------------------------------------------------
 Tue Nov 11 11:03:18 CET 2008 - rodrigo@novell.com
 
diff --git a/gnome-desktop.spec b/gnome-desktop.spec
index 8fd146a..04f718b 100644
--- a/gnome-desktop.spec
+++ b/gnome-desktop.spec
@@ -1,5 +1,5 @@
 #
-# spec file for package gnome-desktop (Version 2.24.1)
+# spec file for package gnome-desktop (Version 2.25.5)
 #
 # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
@@ -19,32 +19,33 @@
 
 
 Name:           gnome-desktop
-BuildRequires:  fdupes gnome-common gnome-doc-utils gnome-doc-utils-devel
-BuildRequires:  gtk-doc intltool libgnomeui-devel perl-XML-Parser
-BuildRequires:  scrollkeeper startup-notification-devel
+BuildRequires:  fdupes
+BuildRequires:  gconf2-devel
+BuildRequires:  gnome-common
+BuildRequires:  gnome-doc-utils-devel
+BuildRequires:  gtk-doc
+BuildRequires:  gtk2-devel
+BuildRequires:  intltool
+BuildRequires:  scrollkeeper
+BuildRequires:  startup-notification-devel
 BuildRequires:  update-desktop-files
 License:        GNU Free Documentation License, Version 1.1 (GFDL 1.1); GPL v2 or later; LGPL v2.1 or later
 Group:          System/GUI/GNOME
 Obsoletes:      gnome-core
-Version:        2.24.1
-Release:        6
+Version:        2.25.5
+Release:        1
 Summary:        The GNOME Desktop API Library
 Source:         %{name}-%{version}.tar.bz2
 Url:            http://www.gnome.org
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-Patch:          icon-search-path.dif
 Patch1:         X-KDE-SubstituteUID.dif
 Patch2:         gnome-desktop-desktop.patch
 # PATCH-FEATURE-OPENSUSE gnome-desktop-recently-used-apps.patch -- Add launched .desktop files to recently used apps.
 Patch3:         gnome-desktop-recently-used-apps.patch
 # PATCH-FEATURE-OPENSUSE gnome-desktop-fate300461-desktop-gettext.patch fate300461 vuntz@novell.com -- Look for translation of desktop entry strings via gettext
 Patch5:         gnome-desktop-fate300461-desktop-gettext.patch
-# PATCH-FIX-UPSTREAM gnome-desktop-foreign-for-screen.patch bgo#555701 rodrigo@novell.com
-Patch7:         gnome-desktop-foreign-for-screen.patch
-# PATCH-FEATURE-UPSTREAM gnome-desktop-randr-gerror.diff federico@novell.com - Add GError reporting to the GnomeRR API for RANDR
-Patch8:         gnome-desktop-randr-gerror.diff
 Requires:       %{name}-lang = %{version}
-Requires:       libgnome-desktop-2-7 = %{version}
+Requires:       libgnome-desktop-2-11 = %{version}
 
 %description
 This package contains the libgnome-desktop library that contains APIs
@@ -66,13 +67,13 @@ Authors:
     Havoc Pennington <hp@redhat.com>
     Anders Carlsson <andersca@gnu.org>           
 
-%package -n libgnome-desktop-2-7
+%package -n libgnome-desktop-2-11
 License:        GNU Free Documentation License, Version 1.1 (GFDL 1.1); GPL v2 or later; LGPL v2.1 or later
 Summary:        The GNOME Desktop API Library
 Group:          System/GUI/GNOME
 Requires:       %{name} >= %{version}
 
-%description -n libgnome-desktop-2-7
+%description -n libgnome-desktop-2-11
 This package contains the libgnome-desktop library that contains APIs
 that really belong in libgnome/libgnomeui but have not seen enough
 testing or development to be considered stable. Use them at your own
@@ -96,7 +97,7 @@ Authors:
 License:        LGPL v2.1 or later
 Summary:        Include Files and Libraries mandatory for Development
 Group:          Development/Libraries/GNOME
-Requires:       %{name} = %{version} gtk2-devel libgnomeui-devel libopenssl-devel startup-notification-devel
+Requires:       %{name} = %{version} gconf2-devel gtk2-devel startup-notification-devel
 
 %description devel
 This package contains all necessary include files and libraries needed
@@ -133,13 +134,10 @@ Authors:
 %lang_package
 %prep
 %setup -q
-%patch -p1
 %patch1
 %patch2 -p0
 %patch3 -p1
-%patch5 -p1
-%patch7 -p1
-%patch8 -p1
+%patch5 -p0
 
 %build
 autoreconf -f -i
@@ -147,7 +145,6 @@ export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
 %configure --with-pic\
 	--disable-static\
 	--disable-scrollkeeper\
-	--with-kde-datadir=/opt/kde3\
 	--with-gnome-distributor="SUSE"
 make %{?jobs:-j%jobs}
 
@@ -155,20 +152,18 @@ make %{?jobs:-j%jobs}
 %makeinstall
 %find_lang %{name}-2.0
 %find_lang fdl %{name}-2.0.lang
-# This no longer seems to exist.
-# %find_lang gnome-feedback %{name}-2.0.lang
 %find_lang gpl %{name}-2.0.lang
 %find_lang lgpl %{name}-2.0.lang
 %suse_update_desktop_file gnome-about Documentation
-%fdupes $RPM_BUILD_ROOT
 %{__rm} -vf %{buildroot}%{_libdir}/*.la
+%fdupes $RPM_BUILD_ROOT
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-%post -n libgnome-desktop-2-7 -p /sbin/ldconfig
+%post -n libgnome-desktop-2-11 -p /sbin/ldconfig
 
-%postun -n libgnome-desktop-2-7 -p /sbin/ldconfig
+%postun -n libgnome-desktop-2-11 -p /sbin/ldconfig
 
 %files
 %defattr (-, root, root)
@@ -176,16 +171,21 @@ rm -rf $RPM_BUILD_ROOT
 %{_bindir}/*
 %{_datadir}/applications/gnome-about.desktop
 %{_datadir}/gnome-about
-%{_datadir}/omf/*
+%doc %{_datadir}/omf/*
 %{_datadir}/pixmaps/*.png
 %{_datadir}/pixmaps/*.xpm
 %doc %{_mandir}/man?/*.*
 
-%files -n libgnome-desktop-2-7
+%files -n libgnome-desktop-2-11
 %defattr(-, root, root)
 %{_libdir}/*.so.*
 
 %files lang -f %{name}-2.0.lang
+## ha/ig does not exist in Factory currently
+##%if %suse_version <= 1110
+# exclude locales which don't exist on old versions of openSUSE
+%exclude %{_datadir}/locale/ig/LC_MESSAGES/*
+##%endif
 
 %files devel
 %defattr (-, root, root)
@@ -198,9 +198,37 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/gtk-doc/html/gnome-desktop
 
 %changelog
-* Sat Jan 17 2009 crrodriguez@suse.de
+* Sun Feb 01 2009 mboman@suse.de
+- Update to version 2.25.5:
+  + GnomeBG: use gdk_color_equal() instead of custom function
+  + GnomeRR: use XRRGetScreenResourcesCurrent instead of
+  XRRGetScreenResources when available (xrandr 1.3) because it's
+  cheaper
+  + GnomeBG: emit "transitioned" signal instead of "changed" signal for
+  new frames in a slideshow background
+  + GnomeBG: reorganize code a bit
+  + GnomeBG: add fading API to support fading between two backgrounds
+  + Translation updates
+* Sat Jan 31 2009 vuntz@novell.com
+- Update gnome-desktop-fate300461-desktop-gettext.patch: the inline
+  translations were ignored if they were not matching the first
+  language returned by g_get_language_names(), and gettext was
+  used. This was not the intended behavior, and made it impossible
+  to customize the name/comment of a launcher, eg.
+* Fri Jan 23 2009 vuntz@novell.com
+- Remove static libraries.
+- Remove part of gnome-desktop-desktop.patch that is already
+  handled with %%suse_update_desktop_file
+- Sanitize BuildRequires and Requires.
+- Minor tweaks.
+* Thu Jan 22 2009 vuntz@novell.com
+- Really drop gnome-desktop-foreign-for-screen.patch, fixed
+  upstream.
+* Fri Jan 16 2009 crrodriguez@suse.de
 - remove "la" files, baby step to clean up all references
   to libavahi-*.la
+* Sat Jan 10 2009 mboman@suse.de
+- Remove gnome-desktop-randr-gerror.diff. Fixed upstream
 * Fri Jan 09 2009 federico@novell.com
 - Added gnome-desktop-randr-gerror.diff.  This adds GError reporting
   to the GnomeRR API, which in turn lets gnome-settings-daemon and
@@ -208,12 +236,38 @@ rm -rf $RPM_BUILD_ROOT
   fails in multihead configuration.
 - Removed gnome-desktop-randr-cloned-outputs.diff, as it is already
   part of the patch above.
+* Tue Jan 06 2009 mboman@suse.de
+- Update to version 2.25.4:
+  + Translation updates
+* Sat Dec 20 2008 mboman@suse.de
+- Update to version 2.25.3:
+  + libgnome-desktop
+    - GnomeRR: plug leaks
+    - GnomeRR: add API-breaking error reporting API
+    - GnomeBG: fix potential crash with some empty slideshow
+    - Build fixes
+  + Translation updates
+* Sun Dec 14 2008 mboman@suse.de
+- Update to version 2.25.2:
+  + libgnome-desktop
+    - GnomeDesktopThumbnail: reenable check for preview::icon
+    - GnomeRR: add Lenovo display name
+    - GnomeBG: plug a leak
+    - GnomeDesktopThumbnail: fix potential crash when a temporary file
+  cannot be created
+  + Misc
+    - Require glib 2.19.1
+    - Update a bit API documentation
+    - Require GTK+ 2.14.0
+  + Translation updates
+- Remove icon-search-path.dif. Not valid due to API/ABI changes
+- Remove gnome-desktop-randr-cloned-outputs.diff. Fixed upstream
 * Tue Nov 11 2008 rodrigo@novell.com
 - Add upstream patch for bgo#555701
 * Wed Oct 22 2008 maw@suse.de
 - Update to version 2.24.1:
   + Updated translations.
-* Sat Oct 04 2008 mboman@suse.de
+* Fri Oct 03 2008 mboman@suse.de
 - Update to version 2.24.0:
   + GnomeRR: don't try and set the screen size if turning off any of the
   CRTC's failed
@@ -322,7 +376,7 @@ rm -rf $RPM_BUILD_ROOT
   for multilib support
 * Tue Apr 01 2008 vuntz@suse.de
 - Remove uz@cyrillic workaround (see bnc#372941)
-* Fri Mar 14 2008 maw@suse.de
+* Thu Mar 13 2008 maw@suse.de
 - Update to version 2.22.0:
   + Updated translations.
 * Tue Mar 04 2008 maw@suse.de
@@ -378,7 +432,7 @@ rm -rf $RPM_BUILD_ROOT
 * Tue Aug 14 2007 maw@suse.de
 - Rename the uz@cyrillic locale directory to uz@Cyrl to avoid
   unowned directories.
-* Wed Aug 08 2007 maw@suse.de
+* Tue Aug 07 2007 maw@suse.de
 - Use %%fdupes
 - Split off a -lang subpackage
 - s#%%run_ldconfig#/sbin/ldconfig/ in %%post and %%postun.
@@ -397,7 +451,7 @@ rm -rf $RPM_BUILD_ROOT
 - Removed invalid desktop Category "Application" (#254654).
 * Fri Apr 27 2007 sbrabec@suse.cz
 - Do not call meinproc (#227624).
-* Thu Apr 12 2007 maw@suse.de
+* Wed Apr 11 2007 maw@suse.de
 - Update to version 2.18.1
 - Minor fixes
 - Updated translations for both the documentation (ar and ca)
@@ -420,7 +474,7 @@ rm -rf $RPM_BUILD_ROOT
 * Wed Nov 15 2006 jimmyk@suse.de
 - Updated recently-used-apps.patch to be compatible with new recently-used
   format, BNC #221392.
-* Fri Oct 13 2006 ro@suse.de
+* Thu Oct 12 2006 ro@suse.de
 - added gnome-doc-utils-devel to buildreq
 * Mon Oct 02 2006 jhargadon@suse.de
 - update to version 2.16.1
@@ -501,11 +555,11 @@ rm -rf $RPM_BUILD_ROOT
 - Update to version 2.9.91
 * Tue Feb 08 2005 sbrabec@suse.cz
 - Changed Categories for gnome-about (#50440).
-* Sun Feb 06 2005 gekker@suse.de
+* Sat Feb 05 2005 gekker@suse.de
 - Update to version 2.9.90.1
 * Sat Jan 22 2005 gekker@suse.de
 - Fixing the broken build
-* Fri Jan 21 2005 gekker@suse.de
+* Thu Jan 20 2005 gekker@suse.de
 - Update to version 2.9.4
 * Tue Nov 02 2004 ro@suse.de
 - locale rename: no -> nb
diff --git a/icon-search-path.dif b/icon-search-path.dif
deleted file mode 100644
index fc4f6a2..0000000
--- a/icon-search-path.dif
+++ /dev/null
@@ -1,99 +0,0 @@
-diff -ruN gnome-desktop-2.2.2/libgnome-desktop/gnome-desktop-item.c gnome-desktop-n/libgnome-desktop/gnome-desktop-item.c
---- gnome-desktop-2.2.2/libgnome-desktop/gnome-desktop-item.c	2003-05-14 14:40:38.000000000 +0200
-+++ gnome-desktop-n/libgnome-desktop/gnome-desktop-item.c	2003-09-15 14:55:59.000000000 +0200
-@@ -2340,6 +2340,11 @@
- static GSList *hicolor_kde_32 = NULL;
- static GSList *hicolor_kde_22 = NULL;
- static GSList *hicolor_kde_16 = NULL;
-+static GSList *crystalsvg_kde_48 = NULL;
-+static GSList *crystalsvg_kde_32 = NULL;
-+static GSList *crystalsvg_kde_22 = NULL;
-+static GSList *crystalsvg_kde_16 = NULL;
-+
- /* XXX: maybe we don't care about locolor
- static GSList *locolor_kde_48 = NULL;
- static GSList *locolor_kde_32 = NULL;
-@@ -2397,6 +2402,10 @@
- 	ADD_DIRS (hicolor, 32);
- 	ADD_DIRS (hicolor, 22);
- 	ADD_DIRS (hicolor, 16);
-+	ADD_DIRS (crystalsvg, 48);
-+	ADD_DIRS (crystalsvg, 32);
-+	ADD_DIRS (crystalsvg, 22);
-+	ADD_DIRS (crystalsvg, 16);
- 
- /* XXX: maybe we don't care about locolor
- 	ADD_DIRS (locolor, 48);
-@@ -2423,6 +2432,15 @@
- 				       g_slist_copy (hicolor_kde_22));
- 		list = g_slist_concat (list,
- 				       g_slist_copy (hicolor_kde_16));
-+		list = g_slist_concat (list,
-+				       g_slist_copy (crystalsvg_kde_48));
-+		list = g_slist_concat (list,
-+				       g_slist_copy (crystalsvg_kde_32));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_22));
-+
- 	} else if (size > 22) {
- 		/* 23-32 */
- 		list = g_slist_concat (g_slist_copy (hicolor_kde_32),
-@@ -2431,6 +2449,15 @@
- 				       g_slist_copy (hicolor_kde_22));
- 		list = g_slist_concat (list,
- 				       g_slist_copy (hicolor_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_48));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_32));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_22));
-+
- 	} else if (size > 16) {
- 		/* 17-22 */
- 		list = g_slist_concat (g_slist_copy (hicolor_kde_22),
-@@ -2439,6 +2466,15 @@
- 				       g_slist_copy (hicolor_kde_48));
- 		list = g_slist_concat (list,
- 				       g_slist_copy (hicolor_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_48));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_32));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_22));
-+
- 	} else {
- 		/* 1-16 */
- 		list = g_slist_concat (g_slist_copy (hicolor_kde_16),
-@@ -2447,6 +2483,15 @@
- 				       g_slist_copy (hicolor_kde_32));
- 		list = g_slist_concat (list,
- 				       g_slist_copy (hicolor_kde_48));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_48));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_32));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_16));
-+                list = g_slist_concat (list,
-+                                       g_slist_copy (crystalsvg_kde_22));
-+
- 	}
- 
- 	list = g_slist_append (list, kde_icondir);
-@@ -2463,7 +2508,7 @@
- 	char *try_prefixes[] = {
- 		"/usr",
- 		"/opt/kde",
--		"/opt/kde2",
-+		"/opt/kde3",
- 		"/usr/local",
- 		"/kde",
- 		"/kde2",