diff --git a/libnautilus-private/nautilus-desktop-directory-file.c b/libnautilus-private/nautilus-desktop-directory-file.c
index 334f587..c45cb05 100644
--- a/libnautilus-private/nautilus-desktop-directory-file.c
+++ b/libnautilus-private/nautilus-desktop-directory-file.c
@@ -399,7 +399,10 @@ desktop_directory_file_get_deep_counts (NautilusFile *file,
 					guint *directory_count,
 					guint *file_count,
 					guint *unreadable_directory_count,
-					goffset *total_size)
+					goffset *total_size,
+					guint *directory_hidden_count,
+					guint *file_hidden_count,
+					goffset *total_hidden_size)
 {
 	NautilusDesktopDirectoryFile *desktop_file;
 	NautilusRequestStatus status;
@@ -411,6 +414,9 @@ desktop_directory_file_get_deep_counts (NautilusFile *file,
 						file_count,
 						unreadable_directory_count,
 						total_size,
+						directory_hidden_count,
+						file_hidden_count,
+						total_hidden_size,
 						TRUE);
 
 	if (file_count) {
diff --git a/libnautilus-private/nautilus-desktop-icon-file.c b/libnautilus-private/nautilus-desktop-icon-file.c
index 512eb67..f1d0454 100644
--- a/libnautilus-private/nautilus-desktop-icon-file.c
+++ b/libnautilus-private/nautilus-desktop-icon-file.c
@@ -113,7 +113,10 @@ desktop_icon_file_get_deep_counts (NautilusFile *file,
 				   guint *directory_count,
 				   guint *file_count,
 				   guint *unreadable_directory_count,
-				   goffset *total_size)
+				   goffset *total_size,
+				   guint *directory_hidden_count,
+				   guint *file_hidden_count,
+				   goffset *total_hidden_size)
 {
 	if (directory_count != NULL) {
 		*directory_count = 0;
@@ -127,6 +130,15 @@ desktop_icon_file_get_deep_counts (NautilusFile *file,
 	if (total_size != NULL) {
 		*total_size = 0;
 	}
+	if (directory_hidden_count != NULL) {
+		*directory_hidden_count = 0;
+	}
+	if (file_hidden_count != NULL) {
+		*file_hidden_count = 0;
+	}
+	if (total_hidden_size != NULL) {
+		*total_hidden_size = 0;
+	}
 
 	return NAUTILUS_REQUEST_DONE;
 }
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c
index 8f2b74a..e8287a3 100644
--- a/libnautilus-private/nautilus-directory-async.c
+++ b/libnautilus-private/nautilus-directory-async.c
@@ -2697,10 +2697,9 @@ deep_count_one (DeepCountState *state,
 	NautilusFile *file;
 	GFile *subdir;
 	gboolean is_seen_inode;
+	gboolean should_skip;
 
-	if (should_skip_file (NULL, info)) {
-		return;
-	}
+	should_skip = should_skip_file (NULL, info);
 
 	is_seen_inode = seen_inode (state, info);
 	if (!is_seen_inode) {
@@ -2709,9 +2708,27 @@ deep_count_one (DeepCountState *state,
 
 	file = state->directory->details->deep_count_file;
 
+	if (!should_skip) {
+		/* Check if a parent is a should_skip */
+		NautilusFile *parent;
+		parent = nautilus_file_get_parent (file);	
+
+		while (parent != NULL) {
+			if (nautilus_file_is_backup_file (parent) || nautilus_file_is_hidden_file (parent)) {
+				should_skip = TRUE;
+				break;
+			}
+			parent = nautilus_file_get_parent (parent);
+		}
+	}
+
 	if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) {
 		/* Count the directory. */
-		file->details->deep_directory_count += 1;
+		if (should_skip) {
+			file->details->deep_hidden_directory_count += 1;
+		} else {
+			file->details->deep_directory_count += 1;
+		}
 
 		/* Record the fact that we have to descend into this directory. */
 
@@ -2720,12 +2737,20 @@ deep_count_one (DeepCountState *state,
 			(state->deep_count_subdirectories, subdir);
 	} else {
 		/* Even non-regular files count as files. */
-		file->details->deep_file_count += 1;
+		if (should_skip) {
+			file->details->deep_hidden_file_count += 1;
+		} else {
+			file->details->deep_file_count += 1;
+		}
 	}
 
 	/* Count the size. */
 	if (!is_seen_inode && g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE)) {
-		file->details->deep_size += g_file_info_get_size (info);
+		if (should_skip) {
+			file->details->deep_hidden_size += g_file_info_get_size (info);
+		} else {
+			file->details->deep_size += g_file_info_get_size (info);
+		}
 	}
 }
 
@@ -2961,6 +2986,9 @@ deep_count_start (NautilusDirectory *directory,
 	file->details->deep_file_count = 0;
 	file->details->deep_unreadable_count = 0;
 	file->details->deep_size = 0;
+	file->details->deep_hidden_directory_count = 0;
+	file->details->deep_hidden_file_count = 0;
+	file->details->deep_hidden_size = 0;
 	directory->details->deep_count_file = file;
 
 	state = g_new0 (DeepCountState, 1);
diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h
index eee3b64..124082e 100644
--- a/libnautilus-private/nautilus-file-private.h
+++ b/libnautilus-private/nautilus-file-private.h
@@ -100,6 +100,10 @@ struct NautilusFileDetails
 	guint deep_unreadable_count;
 	goffset deep_size;
 
+	guint deep_hidden_directory_count;
+	guint deep_hidden_file_count;
+	goffset deep_hidden_size;
+
 	GIcon *icon;
 	
 	char *thumbnail_path;
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 89bbb98..3a53d33 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -4854,6 +4854,9 @@ nautilus_file_get_deep_counts (NautilusFile *file,
 			       guint *file_count,
 			       guint *unreadable_directory_count,
 			       goffset *total_size,
+			       guint *directory_hidden_count,
+			       guint *file_hidden_count,
+			       goffset *total_hidden_size,
 			       gboolean force)
 {
 	if (directory_count != NULL) {
@@ -4869,6 +4872,16 @@ nautilus_file_get_deep_counts (NautilusFile *file,
 		*total_size = 0;
 	}
 
+	if (directory_hidden_count != NULL) {
+		*directory_hidden_count = 0;
+	}
+	if (file_hidden_count != NULL) {
+		*file_hidden_count = 0;
+	}
+	if (total_hidden_size != NULL) {
+		*total_hidden_size = 0;
+	}
+
 	g_return_val_if_fail (NAUTILUS_IS_FILE (file), NAUTILUS_REQUEST_DONE);
 
 	if (!force && !nautilus_file_should_show_directory_item_count (file)) {
@@ -4885,7 +4898,11 @@ nautilus_file_get_deep_counts (NautilusFile *file,
 				   directory_count,
 				   file_count,
 				   unreadable_directory_count,
-				   total_size));
+				   total_size,
+				   directory_hidden_count,
+				   file_hidden_count,
+				   total_hidden_size));
+
 }
 
 void
@@ -5959,7 +5976,7 @@ nautilus_file_get_deep_count_as_string_internal (NautilusFile *file,
 	g_assert (nautilus_file_is_directory (file));
 
 	status = nautilus_file_get_deep_counts 
-		(file, &directory_count, &file_count, &unreadable_count, &total_size, FALSE);
+		(file, &directory_count, &file_count, &unreadable_count, &total_size, NULL, NULL, NULL, FALSE);
 
 	/* Check whether any info is available. */
 	if (status == NAUTILUS_REQUEST_NOT_STARTED) {
@@ -6241,7 +6258,7 @@ nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, GQuark at
 		return g_strdup (count_unreadable ? _("? items") : "...");
 	}
 	if (attribute_q == attribute_deep_size_q) {
-		status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
+		status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
 		if (status == NAUTILUS_REQUEST_DONE) {
 			/* This means no contents at all were readable */
 			return g_strdup (_("? bytes"));
@@ -6251,7 +6268,7 @@ nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, GQuark at
 	if (attribute_q == attribute_deep_file_count_q
 	    || attribute_q == attribute_deep_directory_count_q
 	    || attribute_q == attribute_deep_total_count_q) {
-		status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
+		status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, NULL, NULL, NULL, FALSE);
 		if (status == NAUTILUS_REQUEST_DONE) {
 			/* This means no contents at all were readable */
 			return g_strdup (_("? items"));
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index 011f215..33339d1 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -205,6 +205,9 @@ NautilusRequestStatus   nautilus_file_get_deep_counts                   (Nautilu
 									 guint                          *file_count,
 									 guint                          *unreadable_directory_count,
 									 goffset               *total_size,
+									 guint                          *directory_hidden_count,
+									 guint                          *file_hidden_count,
+									 goffset               *total_hidden_size,
 									 gboolean                        force);
 gboolean                nautilus_file_should_show_thumbnail             (NautilusFile                   *file);
 gboolean                nautilus_file_should_show_directory_item_count  (NautilusFile                   *file);
@@ -538,7 +541,11 @@ typedef struct {
 							  guint                  *directory_count,
 							  guint                  *file_count,
 							  guint                  *unreadable_directory_count,
-							  goffset       *total_size);
+							  goffset       *total_size,
+							  guint                  *directory_hidden_count,
+							  guint                  *file_hidden_count,
+							  goffset       *total_hidden_size);
+
 	gboolean              (* get_date)               (NautilusFile           *file,
 							  NautilusDateType        type,
 							  time_t                 *date);
diff --git a/libnautilus-private/nautilus-search-directory-file.c b/libnautilus-private/nautilus-search-directory-file.c
index 1512418..23e2fb1 100644
--- a/libnautilus-private/nautilus-search-directory-file.c
+++ b/libnautilus-private/nautilus-search-directory-file.c
@@ -118,7 +118,10 @@ search_directory_file_get_deep_counts (NautilusFile *file,
 				       guint *directory_count,
 				       guint *file_count,
 				       guint *unreadable_directory_count,
-				       goffset *total_size)
+				       goffset *total_size,
+				       guint *directory_hidden_count,
+				       guint *file_hidden_count,
+				       goffset *total_hidden_size)
 {
 	NautilusSearchDirectory *search_dir;
 	NautilusFile *dir_file;
@@ -154,6 +157,16 @@ search_directory_file_get_deep_counts (NautilusFile *file,
 		/* FIXME: Maybe we want to calculate this? */
 		*total_size = 0;
 	}
+
+	if (directory_hidden_count != NULL) {
+		*directory_hidden_count = 0;
+	}
+	if (file_hidden_count != NULL) {
+		*file_hidden_count = 0;
+	}
+	if (total_hidden_size != NULL) {
+		*total_hidden_size = 0;
+	}
 	
 	nautilus_file_list_free (file_list);
 	
diff --git a/libnautilus-private/nautilus-vfs-file.c b/libnautilus-private/nautilus-vfs-file.c
index ef7de84..17850c9 100644
--- a/libnautilus-private/nautilus-vfs-file.c
+++ b/libnautilus-private/nautilus-vfs-file.c
@@ -231,7 +231,10 @@ vfs_file_get_deep_counts (NautilusFile *file,
 			  guint *directory_count,
 			  guint *file_count,
 			  guint *unreadable_directory_count,
-			  goffset *total_size)
+			  goffset *total_size,
+			  guint *directory_hidden_count,
+			  guint *file_hidden_count,
+			  goffset *total_hidden_size)
 {
 	GFileType type;
 
@@ -248,6 +251,16 @@ vfs_file_get_deep_counts (NautilusFile *file,
 		*total_size = 0;
 	}
 
+	if (directory_hidden_count != NULL) {
+		*directory_hidden_count = 0;
+	}
+	if (file_hidden_count != NULL) {
+		*file_hidden_count = 0;
+	}
+	if (total_hidden_size != NULL) {
+		*total_hidden_size = 0;
+	}
+
 	if (!nautilus_file_is_directory (file)) {
 		return NAUTILUS_REQUEST_DONE;
 	}
@@ -265,6 +278,17 @@ vfs_file_get_deep_counts (NautilusFile *file,
 		if (total_size != NULL) {
 			*total_size = file->details->deep_size;
 		}
+
+		if (directory_hidden_count != NULL) {
+			*directory_hidden_count = file->details->deep_hidden_directory_count;
+		}
+		if (file_hidden_count != NULL) {
+			*file_hidden_count = file->details->deep_hidden_file_count;
+		}
+		if (total_hidden_size != NULL) {
+			*total_hidden_size = file->details->deep_hidden_size;
+		}
+
 		return file->details->deep_counts_status;
 	}
 
diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c
index f17e704..929f471 100644
--- a/src/file-manager/fm-properties-window.c
+++ b/src/file-manager/fm-properties-window.c
@@ -2265,6 +2265,9 @@ directory_contents_value_field_update (FMPropertiesWindow *window)
 	guint total_count;
 	guint unreadable_directory_count;
 	goffset total_size;
+	guint directory_hidden_count;
+	guint file_hidden_count;
+	goffset file_hidden_size;
 	gboolean used_two_lines;
 	NautilusFile *file;
 	GList *l;
@@ -2293,10 +2296,13 @@ directory_contents_value_field_update (FMPropertiesWindow *window)
 					 &file_count, 
 					 &file_unreadable,
 					 &file_size,
+					 &directory_hidden_count,
+					 &file_hidden_count, 
+					 &file_hidden_size,
 					 TRUE);
-			total_count += (file_count + directory_count);
-			total_size += file_size;
-			
+			total_count += (file_count + directory_count + file_hidden_count + directory_hidden_count);
+			total_size += file_size + file_hidden_size;
+
 			if (file_unreadable) {
 				unreadable_directory_count = TRUE;
 			}
