diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index bef9783..56dfc31 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -228,6 +228,12 @@ enum {
   RECENT_MODEL_COL_NUM_COLUMNS
 };
 
+/* Column numbers for the filter list */
+enum {
+  FILTER_COL_NAME,
+  FILTER_COL_NUM_COLUMNS
+};
+
 /* Identifiers for target types */
 enum {
   GTK_TREE_MODEL_ROW,
@@ -2577,7 +2583,21 @@ renderer_editing_canceled_cb (GtkCellRendererText   *cell_renderer_text,
 static GtkWidget *
 filter_create (GtkFileChooserDefault *impl)
 {
-  impl->filter_combo = gtk_combo_box_new_text ();
+  GtkTreeModel *model;
+  GtkCellRenderer *renderer;
+
+  model = gtk_list_store_new (FILTER_COL_NUM_COLUMNS, G_TYPE_STRING);
+  impl->filter_combo = gtk_combo_box_new_with_model (model);
+  g_object_unref (model);
+
+  renderer = gtk_cell_renderer_text_new ();
+  g_object_set (G_OBJECT (renderer),
+		"ellipsize", PANGO_ELLIPSIZE_END,
+		"ellipsize-set", TRUE,
+		NULL);
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (impl->filter_combo), renderer, TRUE);
+  gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (impl->filter_combo), renderer,
+				 "text", FILTER_COL_NAME);
   gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (impl->filter_combo), FALSE);
 
   g_signal_connect (impl->filter_combo, "changed",
@@ -4742,7 +4762,7 @@ file_pane_create (GtkFileChooserDefault *impl,
   widget = filter_create (impl);
 
   gtk_widget_show (widget);
-  gtk_box_pack_end (GTK_BOX (impl->filter_combo_hbox), widget, FALSE, FALSE, 0);
+  gtk_box_pack_end (GTK_BOX (impl->filter_combo_hbox), widget, TRUE, TRUE, 0);
 
   gtk_size_group_add_widget (size_group, impl->filter_combo_hbox);
   gtk_box_pack_end (GTK_BOX (vbox), impl->filter_combo_hbox, FALSE, FALSE, 0);
@@ -7587,7 +7607,12 @@ gtk_file_chooser_default_add_filter (GtkFileChooser *chooser,
   if (!name)
     name = "Untitled filter";	/* Place-holder, doesn't need to be marked for translation */
 
-  gtk_combo_box_append_text (GTK_COMBO_BOX (impl->filter_combo), name);
+
+  gtk_list_store_insert_with_values (GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX (impl->filter_combo))),
+				     NULL,
+				     -1,
+				     FILTER_COL_NAME, name,
+				     -1);
 
   if (!g_slist_find (impl->filters, impl->current_filter))
     set_current_filter (impl, filter);
