diff --git a/src/nautilus-list-model.c b/src/nautilus-list-model.c
index f5bc2df..8b920bc 100644
--- a/src/nautilus-list-model.c
+++ b/src/nautilus-list-model.c
@@ -1596,8 +1596,34 @@ nautilus_list_model_multi_drag_source_init (EggTreeMultiDragSourceIface *iface)
 	iface->drag_data_delete = nautilus_list_model_multi_drag_data_delete;
 }
 
+static gboolean
+should_show_contents (NautilusDirectory *directory,
+		      gboolean show_hidden,
+		      gboolean show_foreign)
+{
+	GList *list, *node;
+	gboolean res;
+
+	list = nautilus_directory_get_file_list (directory);
+
+	res = TRUE;
+	for (node = list; node != NULL; node = node->next) {
+		if (nautilus_file_should_show (NAUTILUS_FILE (node->data),
+					       show_hidden, show_foreign)) {
+			res = FALSE;
+			break;
+		}
+	}
+
+	nautilus_file_list_free (list);
+	return res;
+}
+
 void
-nautilus_list_model_subdirectory_done_loading (NautilusListModel *model, NautilusDirectory *directory)
+nautilus_list_model_subdirectory_done_loading (NautilusListModel *model,
+					       NautilusDirectory *directory,
+					       gboolean show_hidden,
+					       gboolean show_foreign)
 {
 	GtkTreeIter iter;
 	GtkTreePath *path;
@@ -1620,20 +1646,24 @@ nautilus_list_model_subdirectory_done_loading (NautilusListModel *model, Nautilu
 	/* Only swap loading -> empty if we saw no files yet at "done",
 	 * otherwise, toggle loading at first added file to the model.
 	 */
-	if (!nautilus_directory_is_not_empty (directory) &&
-	    g_sequence_get_length (files) == 1) {
+
+	if (g_sequence_get_length (files) == 1) {
 		dummy_ptr = g_sequence_get_iter_at_pos (file_entry->files, 0);
 		dummy_entry = g_sequence_get (dummy_ptr);
 		if (dummy_entry->file == NULL) {
 			/* was the dummy file */
-			file_entry->loaded = 1;
+			if (!nautilus_directory_is_not_empty (directory) ||
+			     should_show_contents (directory, show_hidden, show_foreign)) {
+
+				file_entry->loaded = 1;
 			
-			iter.stamp = model->details->stamp;
-			iter.user_data = dummy_ptr;
+				iter.stamp = model->details->stamp;
+				iter.user_data = dummy_ptr;
 			
-			path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
-			gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
-			gtk_tree_path_free (path);
+				path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
+				gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+				gtk_tree_path_free (path);
+			}
 		}
 	}
 }
diff --git a/src/nautilus-list-model.h b/src/nautilus-list-model.h
index 0b07e8c..610219b 100644
--- a/src/nautilus-list-model.h
+++ b/src/nautilus-list-model.h
@@ -128,7 +128,9 @@ int               nautilus_list_model_get_column_number (NautilusListModel *mode
 							 const char *column_name);
 
 void              nautilus_list_model_subdirectory_done_loading (NautilusListModel       *model,
-								 NautilusDirectory *directory);
+								 NautilusDirectory *directory,
+								 gboolean show_hidden,
+								 gboolean show_foreign);
 
 void              nautilus_list_model_set_highlight_for_files (NautilusListModel *model,
 							       GList *files);
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index de8cf72..050ef0e 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -861,7 +861,12 @@ popup_menu_callback (GtkWidget *widget, gpointer callback_data)
 static void
 subdirectory_done_loading_callback (NautilusDirectory *directory, NautilusListView *view)
 {
-	nautilus_list_model_subdirectory_done_loading (view->details->model, directory);
+	gboolean show_hidden, show_foreign;
+
+	nautilus_view_get_show_content_settings (NAUTILUS_VIEW (view),
+						 &show_hidden, &show_foreign);
+
+	nautilus_list_model_subdirectory_done_loading (view->details->model, directory, show_hidden, show_foreign);
 }
 
 static void
@@ -882,8 +887,15 @@ row_expanded_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *pa
 		nautilus_view_add_subdirectory (NAUTILUS_VIEW (view), directory);
 		
 		if (nautilus_directory_are_all_files_seen (directory)) {
+			gboolean show_hidden, show_foreign;
+
+			nautilus_view_get_show_content_settings (NAUTILUS_VIEW (view),
+								 &show_hidden, &show_foreign);
+
 			nautilus_list_model_subdirectory_done_loading (view->details->model,
-								 directory);
+								       directory,
+								       show_hidden,
+								       show_foreign);
 		} else {
 			g_signal_connect_object (directory, "done_loading",
 						 G_CALLBACK (subdirectory_done_loading_callback),
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 18d35c9..466ae40 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -9349,6 +9349,25 @@ real_is_read_only (NautilusView *view)
 }
 
 /**
+ * nautilus_view_get_show_contents_settings
+ *
+ * XXX
+ */
+
+void
+nautilus_view_get_show_content_settings (NautilusView *view,
+					 gboolean *show_hidden_files,
+					 gboolean *show_foreign_files)
+{
+	if (show_hidden_files != NULL) {
+		*show_hidden_files = view->details->show_hidden_files;
+	}
+	if (show_foreign_files != NULL) {
+		*show_foreign_files = view->details->show_foreign_files;
+	}
+}
+
+/**
  * nautilus_view_should_show_file
  * 
  * Returns whether or not this file should be displayed based on
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index b53c45f..254960f 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -339,6 +339,9 @@ void                nautilus_view_pop_up_background_context_menu   (NautilusView
 								    GdkEventButton   *event);
 void                nautilus_view_pop_up_selection_context_menu    (NautilusView  *view,
 								    GdkEventButton   *event); 
+void                nautilus_view_get_show_content_settings        (NautilusView *view,
+								    gboolean *show_hidden_files,
+								    gboolean *show_foreign_files);
 gboolean            nautilus_view_should_show_file                 (NautilusView  *view,
 								    NautilusFile     *file);
 gboolean	    nautilus_view_should_sort_directories_first    (NautilusView  *view);
