diff -uNr a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c
--- a/gtk/gtkfilesystemmodel.c	2010-05-02 20:33:00.000000000 -0300
+++ b/gtk/gtkfilesystemmodel.c	2010-09-14 19:54:43.000000000 -0300
@@ -1378,6 +1378,12 @@
 gtk_file_system_model_refilter_all (GtkFileSystemModel *model)
 {
   guint i;
+  GFile *child;
+  GFileInfo *info;
+  GFileType type;
+  gsize file_size;
+  char *file_contents;
+  GHashTable *ghtable = NULL;
 
   if (model->frozen)
     {
@@ -1386,13 +1392,51 @@
     }
 
   _gtk_file_system_model_freeze_updates (model);
+  
+  if(!model->show_hidden)
+    {
+      child = g_file_get_child (model->dir, ".hidden");
+
+      type = G_FILE_TYPE_UNKNOWN;
+
+      info = g_file_query_info (child, G_FILE_ATTRIBUTE_STANDARD_TYPE, 0, NULL, NULL);
+      if (info != NULL)
+        {
+          type = g_file_info_get_file_type (info);
+          g_object_unref (info);
+        }
 
+      if (type == G_FILE_TYPE_REGULAR && g_file_load_contents (child, NULL, &file_contents, &file_size, NULL, NULL))
+        {
+          ghtable =  g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+          g_object_unref (child);
+          i = 0;
+          while (i < file_size)
+            {
+              gint start;
+              start = i;
+              while (i < file_size && file_contents[i] != '\n')
+                i++;
+              if (i > start)
+                {
+                  char *hidden_filename;
+                  hidden_filename = g_strndup (file_contents + start, i - start);
+                  g_hash_table_insert (ghtable, hidden_filename, hidden_filename);
+                }
+              i++;
+            }
+        }
+    }
   /* start at index 1, don't change the editable */
   for (i = 1; i < model->files->len; i++)
     {
-      node_set_visible (model, i, node_should_be_visible (model, i));
+      FileModelNode *node = get_node (model, i);
+      if(ghtable && g_hash_table_lookup(ghtable,g_file_info_get_name (node->info)) != NULL)
+        node_set_visible (model, i, FALSE);
+      else
+        node_set_visible (model, i, node_should_be_visible (model, i));
     }
-
+  g_hash_table_destroy(ghtable);
   model->filter_on_thaw = FALSE;
   _gtk_file_system_model_thaw_updates (model);
 }
