diff -up gdm-2.23.92/gui/simple-greeter/gdm-language-option-widget.c.filter-dupes-from-lang-list gdm-2.23.92/gui/simple-greeter/gdm-language-option-widget.c
--- gdm-2.23.92/gui/simple-greeter/gdm-language-option-widget.c.filter-dupes-from-lang-list	2008-08-26 15:04:00.000000000 -0400
+++ gdm-2.23.92/gui/simple-greeter/gdm-language-option-widget.c	2008-09-17 11:07:51.000000000 -0400
@@ -173,7 +173,7 @@ gdm_language_option_widget_class_init (G
         g_type_class_add_private (klass, sizeof (GdmLanguageOptionWidgetPrivate));
 }
 
-static gboolean
+static char *
 gdm_language_option_widget_lookup_item (GdmRecentOptionWidget *widget,
                                         const char            *locale,
                                         char                 **name,
@@ -182,11 +182,15 @@ gdm_language_option_widget_lookup_item (
         char *language;
         char *readable_language;
         char *lang_tag;
+        char *normalized_locale;
 
-        language = gdm_get_language_from_name (locale, locale);
+        normalized_locale = gdm_normalize_language_name (locale);
+
+        language = gdm_get_language_from_name (locale, normalized_locale);
 
         if (language == NULL) {
-                return FALSE;
+                g_free (normalized_locale);
+                return NULL;
         }
 
         readable_language = gdm_get_language_from_name (locale, NULL);
@@ -197,7 +201,7 @@ gdm_language_option_widget_lookup_item (
         g_free (language);
         g_free (lang_tag);
 
-        return TRUE;
+        return normalized_locale;
 }
 
 static void
@@ -294,7 +298,7 @@ gdm_language_option_widget_set_current_l
 
         if (normalized_language_name != NULL &&
             !gdm_option_widget_lookup_item (GDM_OPTION_WIDGET (widget),
-                                            normalized_language_name, NULL, NULL, NULL)) {
+                                            &normalized_language_name, NULL, NULL, NULL)) {
                 gdm_recent_option_widget_add_item (GDM_RECENT_OPTION_WIDGET (widget),
                                                    normalized_language_name);
         }
diff -up gdm-2.23.92/gui/simple-greeter/gdm-layout-option-widget.c.filter-dupes-from-lang-list gdm-2.23.92/gui/simple-greeter/gdm-layout-option-widget.c
--- gdm-2.23.92/gui/simple-greeter/gdm-layout-option-widget.c.filter-dupes-from-lang-list	2008-09-17 10:55:20.000000000 -0400
+++ gdm-2.23.92/gui/simple-greeter/gdm-layout-option-widget.c	2008-09-17 11:08:07.000000000 -0400
@@ -176,24 +176,24 @@ gdm_layout_option_widget_class_init (Gdm
         g_type_class_add_private (klass, sizeof (GdmLayoutOptionWidgetPrivate));
 }
 
-static gboolean
+static char *
 gdm_layout_option_widget_lookup_item (GdmRecentOptionWidget *widget,
-                                      const char            *id,
+                                      const char            *key,
                                       char                 **name,
                                       char                 **comment)
 {
         char *layout;
 
-        layout = gdm_get_layout_from_name (id);
+        layout = gdm_get_layout_from_name (key);
 
         if (layout == NULL) {
-                return FALSE;
+                return NULL;
         }
 
         *name = layout;
         *comment = NULL;
 
-        return TRUE;
+        return g_strdup (key);
 }
 
 static void
diff -up gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.c.filter-dupes-from-lang-list gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.c
--- gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.c.filter-dupes-from-lang-list	2008-08-26 15:04:00.000000000 -0400
+++ gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.c	2008-09-17 11:06:34.000000000 -0400
@@ -159,13 +159,24 @@ gdm_recent_option_widget_sync_items_from
         default_is_set = FALSE;
 
         for (tmp = list; tmp != NULL; tmp = tmp->next) {
-                const char *id;
+                const char *key;
+                char       *id;
                 char       *name;
                 char       *comment;
 
-                id = (char *) tmp->data;
+                key = (char *) tmp->data;
+
+                id = widget->priv->lookup_item_func (widget, key, &name, &comment);
+
+                if (id != NULL) {
+                        gboolean item_exists;
+
+                        item_exists = gdm_option_widget_lookup_item (GDM_OPTION_WIDGET (widget), id, NULL, NULL, NULL);
+
+                        if (item_exists) {
+                                continue;
+                        }
 
-                if (widget->priv->lookup_item_func (widget, id, &name, &comment)) {
                         gdm_option_widget_add_item (GDM_OPTION_WIDGET (widget),
                                                     id, name, comment,
                                                     GDM_OPTION_WIDGET_POSITION_MIDDLE);
@@ -177,6 +188,7 @@ gdm_recent_option_widget_sync_items_from
 
                         g_free (name);
                         g_free (comment);
+                        g_free (id);
                 }
         }
 
diff -up gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.h.filter-dupes-from-lang-list gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.h
--- gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.h.filter-dupes-from-lang-list	2008-08-26 15:04:00.000000000 -0400
+++ gdm-2.23.92/gui/simple-greeter/gdm-recent-option-widget.h	2008-09-17 11:07:40.000000000 -0400
@@ -48,10 +48,10 @@ typedef struct
         GdmOptionWidgetClass       parent_class;
 } GdmRecentOptionWidgetClass;
 
-typedef gboolean (* GdmRecentOptionLookupItemFunc) (GdmRecentOptionWidget  *widget,
-                                                    const char             *id,
-                                                    char                  **name,
-                                                    char                  **comment);
+typedef char * (* GdmRecentOptionLookupItemFunc) (GdmRecentOptionWidget  *widget,
+                                                  const char             *key,
+                                                  char                  **name,
+                                                  char                  **comment);
 
 
 GType                  gdm_recent_option_widget_get_type               (void);
