diff --git a/gtk/gtkfilechooserbutton.c b/gtk/gtkfilechooserbutton.c
index 5154ab1..62b901d 100644
--- a/gtk/gtkfilechooserbutton.c
+++ b/gtk/gtkfilechooserbutton.c
@@ -570,6 +570,8 @@ gtk_file_chooser_button_set_current_folder (GtkFileChooser    *chooser,
 
       g_signal_emit_by_name (button, "current-folder-changed");
 
+      update_combo_box (button);
+
       return TRUE;
     }
 }
@@ -2329,7 +2331,18 @@ update_combo_box (GtkFileChooserButton *button)
 
   gtk_tree_model_get_iter_first (priv->filter_model, &iter);
 
-  file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->dialog));
+  if (priv->active) 
+    {
+      file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->dialog));
+    } 
+  else 
+    {
+      if (priv->current_folder_while_inactive) {
+        file = g_object_ref (priv->current_folder_while_inactive);
+      } else {
+        file = 0;
+      }
+    }
 
   row_found = FALSE;
 
@@ -2687,8 +2700,8 @@ combo_box_changed_cb (GtkComboBox *combo_box,
 	case ROW_TYPE_CURRENT_FOLDER:
 	  gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (priv->dialog));
 	  if (data)
-	    gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->dialog),
-						      data, NULL);
+	    gtk_file_chooser_button_set_current_folder (GTK_FILE_CHOOSER (button),
+                                                        data, NULL);
 	  break;
 	case ROW_TYPE_VOLUME:
 	  {
@@ -2698,8 +2711,8 @@ combo_box_changed_cb (GtkComboBox *combo_box,
 	    base_file = _gtk_file_system_volume_get_root (data);
 	    if (base_file)
 	      {
-		gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->dialog),
-							  base_file, NULL);
+		gtk_file_chooser_button_set_current_folder (GTK_FILE_CHOOSER (button),
+                                                                 base_file, NULL);
 		g_object_unref (base_file);
 	      }
 	  }
