diff --git a/libnautilus-private/nautilus-column-chooser.c b/libnautilus-private/nautilus-column-chooser.c
index f9b3353..12e1b01 100644
--- a/libnautilus-private/nautilus-column-chooser.c
+++ b/libnautilus-private/nautilus-column-chooser.c
@@ -39,6 +39,8 @@ struct _NautilusColumnChooserDetails
 	GtkWidget *move_up_button;
 	GtkWidget *move_down_button;
 	GtkWidget *use_default_button;
+
+	NautilusFile *file;
 };
 
 enum {
@@ -49,6 +51,11 @@ enum {
 };
 
 enum {
+	PROP_FILE = 1,
+	NUM_PROPERTIES
+};
+
+enum {
 	CHANGED,
 	USE_DEFAULT,
 	LAST_SIGNAL
@@ -58,9 +65,38 @@ static guint signals[LAST_SIGNAL];
 
 G_DEFINE_TYPE(NautilusColumnChooser, nautilus_column_chooser, GTK_TYPE_HBOX);
 
+static void nautilus_column_chooser_constructed (GObject *object);
+
+static void
+nautilus_column_chooser_set_property (GObject *object,
+				      guint param_id,
+				      const GValue *value,
+				      GParamSpec *pspec)
+{
+	NautilusColumnChooser *chooser;
+
+	chooser = NAUTILUS_COLUMN_CHOOSER (object);
+
+	switch (param_id) {
+		case PROP_FILE:
+			chooser->details->file = g_value_get_object (value);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+			break;
+	}
+}
+
 static void
 nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class)
 {
+	GObjectClass *oclass;
+
+	oclass = G_OBJECT_CLASS (chooser_class);
+
+	oclass->set_property = nautilus_column_chooser_set_property;
+	oclass->constructed = nautilus_column_chooser_constructed;
+
 	signals[CHANGED] = g_signal_new
 		("changed",
 		 G_TYPE_FROM_CLASS (chooser_class),
@@ -81,6 +117,15 @@ nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class)
 		 g_cclosure_marshal_VOID__VOID,
 		 G_TYPE_NONE, 0);
 
+	g_object_class_install_property (oclass,
+	                                 PROP_FILE,
+	                                 g_param_spec_object ("file",
+	                                                      "File",
+	                                                      "The file this column chooser is for",
+	                                                      NAUTILUS_TYPE_FILE,
+	                                                      G_PARAM_CONSTRUCT_ONLY |
+	                                                      G_PARAM_WRITABLE));
+
 	g_type_class_add_private (chooser_class, sizeof (NautilusColumnChooserDetails));
 }
 
@@ -360,9 +405,9 @@ populate_tree (NautilusColumnChooser *chooser)
 {
 	GList *columns;
 	GList *l;
-	
-	columns = nautilus_get_all_columns ();
-	
+
+	columns = nautilus_get_columns_for_file (chooser->details->file);
+
 	for (l = columns; l != NULL; l = l->next) {
 		GtkTreeIter iter;
 		NautilusColumn *column;
@@ -390,6 +435,19 @@ populate_tree (NautilusColumnChooser *chooser)
 }
 
 static void
+nautilus_column_chooser_constructed (GObject *object)
+{
+	NautilusColumnChooser *chooser;
+
+	chooser = NAUTILUS_COLUMN_CHOOSER (object);
+
+	populate_tree (chooser);
+
+	g_signal_connect (chooser->details->store, "row_deleted", 
+			  G_CALLBACK (row_deleted_callback), chooser);
+}
+
+static void
 nautilus_column_chooser_init (NautilusColumnChooser *chooser)
 {	
 	chooser->details = G_TYPE_INSTANCE_GET_PRIVATE ((chooser), NAUTILUS_TYPE_COLUMN_CHOOSER, NautilusColumnChooserDetails);
@@ -401,11 +459,6 @@ nautilus_column_chooser_init (NautilusColumnChooser *chooser)
 
 	add_tree_view (chooser);
 	add_buttons (chooser);
-
-	populate_tree (chooser);
-
-	g_signal_connect (chooser->details->store, "row_deleted", 
-			  G_CALLBACK (row_deleted_callback), chooser);
 }
 
 static void 
@@ -517,8 +570,8 @@ set_column_order (NautilusColumnChooser *chooser,
 	GList *columns;
 	GList *l;
 	GtkTreePath *path;
-	
-	columns = nautilus_get_all_columns ();
+
+	columns = nautilus_get_columns_for_file (chooser->details->file);	
 	columns = nautilus_sort_columns (columns, column_order);
 
 	g_signal_handlers_block_by_func (chooser->details->store,
@@ -581,8 +634,8 @@ nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser,
 }
 
 GtkWidget *
-nautilus_column_chooser_new (void)
+nautilus_column_chooser_new (NautilusFile *file)
 {
-	return g_object_new (NAUTILUS_TYPE_COLUMN_CHOOSER, NULL);
+	return g_object_new (NAUTILUS_TYPE_COLUMN_CHOOSER, "file", file, NULL);
 }
 
diff --git a/libnautilus-private/nautilus-column-chooser.h b/libnautilus-private/nautilus-column-chooser.h
index 55c7c8a..cccf80a 100644
--- a/libnautilus-private/nautilus-column-chooser.h
+++ b/libnautilus-private/nautilus-column-chooser.h
@@ -26,6 +26,7 @@
 #define NAUTILUS_COLUMN_CHOOSER_H
 
 #include <gtk/gtk.h>
+#include <libnautilus-private/nautilus-file.h>
 
 #define NAUTILUS_TYPE_COLUMN_CHOOSER nautilus_column_chooser_get_type()
 #define NAUTILUS_COLUMN_CHOOSER(obj) \
@@ -55,7 +56,7 @@ typedef struct {
 } NautilusColumnChooserClass;
 
 GType      nautilus_column_chooser_get_type            (void);
-GtkWidget *nautilus_column_chooser_new                 (void);
+GtkWidget *nautilus_column_chooser_new                 (NautilusFile *file);
 void       nautilus_column_chooser_set_settings    (NautilusColumnChooser   *chooser,
 						    char                   **visible_columns, 
 						    char                   **column_order);
diff --git a/libnautilus-private/nautilus-column-utilities.c b/libnautilus-private/nautilus-column-utilities.c
index bc8c80b..b76e625 100644
--- a/libnautilus-private/nautilus-column-utilities.c
+++ b/libnautilus-private/nautilus-column-utilities.c
@@ -157,20 +157,71 @@ get_extension_columns (void)
 	return columns;
 }
 
+static GList *
+get_trash_columns (void)
+{
+	static GList *columns = NULL;
+
+	if (columns == NULL) {
+		columns = g_list_append (columns,
+					 g_object_new (NAUTILUS_TYPE_COLUMN,
+						       "name", "trashed_on",
+						       "attribute", "trashed_on",
+						       "label", _("Trashed On"),
+						       "description", _("Date when file was moved to the Trash"),
+						       NULL));
+		columns = g_list_append (columns,
+			                 g_object_new (NAUTILUS_TYPE_COLUMN,
+			                               "name", "trash_orig_path",
+			                               "attribute", "trash_orig_path",
+			                               "label", _("Original Location"),
+			                               "description", _("Original location of file before moved to the Trash"),
+			                               NULL));
+	}
+
+	return nautilus_column_list_copy (columns);
+}
+
 GList *
-nautilus_get_all_columns (void)
+nautilus_get_common_columns (void)
 {
 	static GList *columns = NULL;
-	
+
 	if (!columns) {
-		columns =  g_list_concat (get_builtin_columns (), 
-					  get_extension_columns ());
+		columns = g_list_concat (get_builtin_columns (),
+		                         get_extension_columns ());
 	}
 
 	return nautilus_column_list_copy (columns);
 }
 
 GList *
+nautilus_get_all_columns (void)
+{
+	GList *columns = NULL;
+
+	columns = g_list_concat (nautilus_get_common_columns (),
+	                         get_trash_columns ());
+
+	return columns;
+}
+
+GList *
+nautilus_get_columns_for_file (NautilusFile *file)
+{
+	GList *columns;
+
+	columns = nautilus_get_common_columns ();
+
+	if (file != NULL && nautilus_file_is_in_trash (file)) {
+		columns = g_list_concat (columns,
+		                         get_trash_columns ());
+	}
+
+	return columns;
+}
+
+GList *
 nautilus_column_list_copy (GList *columns) 
 {
 	GList *ret;
diff --git a/libnautilus-private/nautilus-column-utilities.h b/libnautilus-private/nautilus-column-utilities.h
index a830651..f2d92c4 100644
--- a/libnautilus-private/nautilus-column-utilities.h
+++ b/libnautilus-private/nautilus-column-utilities.h
@@ -26,8 +26,11 @@
 #define NAUTILUS_COLUMN_UTILITIES_H
 
 #include <libnautilus-extension/nautilus-column.h>
+#include <libnautilus-private/nautilus-file.h>
 
 GList *nautilus_get_all_columns       (void);
+GList *nautilus_get_common_columns    (void);
+GList *nautilus_get_columns_for_file (NautilusFile *file);
 GList *nautilus_column_list_copy      (GList       *columns);
 void   nautilus_column_list_free      (GList       *columns);
 
diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h
index 1d3b2bf..eee3b64 100644
--- a/libnautilus-private/nautilus-file-private.h
+++ b/libnautilus-private/nautilus-file-private.h
@@ -40,7 +40,7 @@
 #define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_BYTES               1024
 
 #define NAUTILUS_FILE_DEFAULT_ATTRIBUTES				\
-	"standard::*,access::*,mountable::*,time::*,unix::*,owner::*,selinux::*,thumbnail::*,id::filesystem,trash::orig-path,metadata::*"
+	"standard::*,access::*,mountable::*,time::*,unix::*,owner::*,selinux::*,thumbnail::*,id::filesystem,trash::orig-path,trash::deletion-date,metadata::*"
 
 /* These are in the typical sort order. Known things come first, then
  * things where we can't know, finally things where we don't yet know.
@@ -226,6 +226,8 @@ struct NautilusFileDetails
 	eel_boolean_bit filesystem_readonly           : 1;
 	eel_boolean_bit filesystem_use_preview        : 2; /* GFilesystemPreviewType */
 	eel_boolean_bit filesystem_info_is_up_to_date : 1;
+
+	time_t trash_time; /* 0 is unknown */
 };
 
 typedef struct {
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index b69ba00..d3f5fe9 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -130,6 +130,8 @@ static GQuark attribute_name_q,
 	attribute_deep_directory_count_q,
 	attribute_deep_total_count_q,
 	attribute_date_changed_q,
+	attribute_trashed_on_q,
+	attribute_trash_orig_path_q,
 	attribute_date_permissions_q,
 	attribute_permissions_q,
 	attribute_selinux_context_q,
@@ -467,6 +469,7 @@ nautilus_file_clear_info (NautilusFile *file)
 	file->details->mtime = 0;
 	file->details->atime = 0;
 	file->details->ctime = 0;
+	file->details->trash_time = 0;
 	g_free (file->details->symlink_name);
 	file->details->symlink_name = NULL;
 	eel_ref_str_unref (file->details->mime_type);
@@ -2052,6 +2055,9 @@ update_info_internal (NautilusFile *file,
 	goffset size;
 	int sort_order;
 	time_t atime, mtime, ctime;
+	time_t trash_time;
+	GTimeVal g_trash_time;
+	const char * time_string;
 	const char *symlink_name, *mime_type, *selinux_context, *name, *thumbnail_path;
 	GFileType file_type;
 	GIcon *icon;
@@ -2415,6 +2421,17 @@ update_info_internal (NautilusFile *file,
 		file->details->filesystem_id = eel_ref_str_get_unique (filesystem_id);
 	}
 
+	trash_time = 0;
+	time_string = g_file_info_get_attribute_string (info, "trash::deletion-date");
+	if (time_string != NULL) {
+		g_time_val_from_iso8601 (time_string, &g_trash_time);
+		trash_time = g_trash_time.tv_sec;
+	}
+	if (file->details->trash_time != trash_time) {
+		changed = TRUE;
+		file->details->trash_time = trash_time;
+	}
+
 	trash_orig_path = g_file_info_get_attribute_byte_string (info, "trash::orig-path");
 	if (eel_strcmp (file->details->trash_orig_path, trash_orig_path) != 0) {
 		changed = TRUE;
@@ -2668,6 +2685,9 @@ get_time (NautilusFile *file,
 	case NAUTILUS_DATE_TYPE_ACCESSED:
 		time = file->details->atime;
 		break;
+	case NAUTILUS_DATE_TYPE_TRASHED:
+		time = file->details->trash_time;
+		break;
 	default:
 		g_assert_not_reached ();
 		break;
@@ -3182,6 +3202,12 @@ nautilus_file_compare_for_sort (NautilusFile *file_1,
 				result = compare_by_full_path (file_1, file_2);
 			}
 			break;
+		case NAUTILUS_FILE_SORT_BY_TRASHED_TIME:
+			result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_TRASHED);
+			if (result == 0) {
+				result = compare_by_full_path (file_1, file_2);
+			}
+			break;
 		case NAUTILUS_FILE_SORT_BY_EMBLEMS:
 			/* GnomeVFS doesn't know squat about our emblems, so
 			 * we handle comparing them here, before falling back
@@ -3245,6 +3271,11 @@ nautilus_file_compare_for_sort_by_attribute_q   (NautilusFile
 						       NAUTILUS_FILE_SORT_BY_ATIME,
 						       directories_first,
 						       reversed);
+        } else if (attribute == attribute_trashed_on_q) {
+		return nautilus_file_compare_for_sort (file_1, file_2,
+						       NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
+						       directories_first,
+						       reversed);
 	} else if (attribute == attribute_emblems_q) {
 		return nautilus_file_compare_for_sort (file_1, file_2,
 						       NAUTILUS_FILE_SORT_BY_EMBLEMS,
@@ -4340,6 +4371,7 @@ nautilus_file_get_date (NautilusFile *file,
 	g_return_val_if_fail (date_type == NAUTILUS_DATE_TYPE_CHANGED
 			      || date_type == NAUTILUS_DATE_TYPE_ACCESSED
 			      || date_type == NAUTILUS_DATE_TYPE_MODIFIED
+			      || date_type == NAUTILUS_DATE_TYPE_TRASHED
 			      || date_type == NAUTILUS_DATE_TYPE_PERMISSIONS_CHANGED, FALSE);
 
 	if (file == NULL) {
@@ -4579,6 +4611,30 @@ nautilus_file_fit_modified_date_as_string (NautilusFile *file,
 		width, measure_callback, truncate_callback, measure_context);
 }
 
+static char *
+nautilus_file_get_trash_original_file_parent_as_string (NautilusFile *file)
+{
+	NautilusFile *orig_file, *parent;
+	GFile *location;
+	char *filename;
+
+	if (file->details->trash_orig_path != NULL) {
+		orig_file = nautilus_file_get_trash_original_file (file);
+		parent = nautilus_file_get_parent (orig_file);
+		location = nautilus_file_get_location (parent);
+
+		filename = g_file_get_parse_name (location);
+
+		g_object_unref (location);
+		nautilus_file_unref (parent);
+		nautilus_file_unref (orig_file);
+
+		return filename;
+	}
+
+	return NULL;
+}
+
 /**
  * nautilus_file_get_date_as_string:
  * 
@@ -6008,7 +6064,7 @@ nautilus_file_get_deep_directory_count_as_string (NautilusFile *file)
  * set includes "name", "type", "mime_type", "size", "deep_size", "deep_directory_count",
  * "deep_file_count", "deep_total_count", "date_modified", "date_changed", "date_accessed", 
  * "date_permissions", "owner", "group", "permissions", "octal_permissions", "uri", "where",
- * "link_target", "volume", "free_space", "selinux_context"
+ * "link_target", "volume", "free_space", "selinux_context", "trashed_on", "trashed_orig_path"
  * 
  * Returns: Newly allocated string ready to display to the user, or NULL
  * if the value is unknown or @attribute_name is not supported.
@@ -6046,6 +6102,9 @@ nautilus_file_get_string_attribute_q (NautilusFile *file, GQuark attribute_q)
 	if (attribute_q == attribute_deep_total_count_q) {
 		return nautilus_file_get_deep_total_count_as_string (file);
 	}
+	if (attribute_q == attribute_trash_orig_path_q) {
+		return nautilus_file_get_trash_original_file_parent_as_string (file);
+	}
 	if (attribute_q == attribute_date_modified_q) {
 		return nautilus_file_get_date_as_string (file, 
 							 NAUTILUS_DATE_TYPE_MODIFIED);
@@ -6058,6 +6117,10 @@ nautilus_file_get_string_attribute_q (NautilusFile *file, GQuark attribute_q)
 		return nautilus_file_get_date_as_string (file,
 							 NAUTILUS_DATE_TYPE_ACCESSED);
 	}
+	if (attribute_q == attribute_trashed_on_q) {
+		return nautilus_file_get_date_as_string (file,
+							 NAUTILUS_DATE_TYPE_TRASHED);
+	}
 	if (attribute_q == attribute_date_permissions_q) {
 		return nautilus_file_get_date_as_string (file,
 							 NAUTILUS_DATE_TYPE_PERMISSIONS_CHANGED);
@@ -6183,6 +6246,14 @@ nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, GQuark at
 	if (attribute_q == attribute_mime_type_q) {
 		return g_strdup (_("unknown MIME type"));
 	}
+	if (attribute_q == attribute_trashed_on_q) {
+		/* If n/a */
+		return g_strdup ("");
+	}
+	if (attribute_q == attribute_trash_orig_path_q) {
+		/* If n/a */
+		return g_strdup ("");
+	}
 	
 	/* Fallback, use for both unknown attributes and attributes
 	 * for which we have no more appropriate default.
@@ -6204,6 +6275,7 @@ nautilus_file_is_date_sort_attribute_q (GQuark attribute_q)
 	    attribute_q == attribute_accessed_date_q ||
 	    attribute_q == attribute_date_accessed_q ||
 	    attribute_q == attribute_date_changed_q ||
+	    attribute_q == attribute_trashed_on_q ||
 	    attribute_q == attribute_date_permissions_q) {
 		return TRUE;
 	}
@@ -7916,6 +7988,8 @@ nautilus_file_class_init (NautilusFileClass *class)
 	attribute_deep_directory_count_q = g_quark_from_static_string ("deep_directory_count");
 	attribute_deep_total_count_q = g_quark_from_static_string ("deep_total_count");
 	attribute_date_changed_q = g_quark_from_static_string ("date_changed");
+	attribute_trashed_on_q = g_quark_from_static_string ("trashed_on");
+	attribute_trash_orig_path_q = g_quark_from_static_string ("trash_orig_path");
 	attribute_date_permissions_q = g_quark_from_static_string ("date_permissions");
 	attribute_permissions_q = g_quark_from_static_string ("permissions");
 	attribute_selinux_context_q = g_quark_from_static_string ("selinux_context");
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index 6959b1f..8c86ae2 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -61,7 +61,8 @@ typedef enum {
 	NAUTILUS_FILE_SORT_BY_TYPE,
 	NAUTILUS_FILE_SORT_BY_MTIME,
         NAUTILUS_FILE_SORT_BY_ATIME,
-	NAUTILUS_FILE_SORT_BY_EMBLEMS
+	NAUTILUS_FILE_SORT_BY_EMBLEMS,
+	NAUTILUS_FILE_SORT_BY_TRASHED_TIME
 } NautilusFileSortType;	
 
 typedef enum {
@@ -487,7 +488,8 @@ typedef enum {
 	NAUTILUS_DATE_TYPE_MODIFIED,
 	NAUTILUS_DATE_TYPE_CHANGED,
 	NAUTILUS_DATE_TYPE_ACCESSED,
-	NAUTILUS_DATE_TYPE_PERMISSIONS_CHANGED
+	NAUTILUS_DATE_TYPE_PERMISSIONS_CHANGED,
+	NAUTILUS_DATE_TYPE_TRASHED
 } NautilusDateType;
 
 typedef struct {
diff --git a/libnautilus-private/nautilus-vfs-file.c b/libnautilus-private/nautilus-vfs-file.c
index 97faccd..ef7de84 100644
--- a/libnautilus-private/nautilus-vfs-file.c
+++ b/libnautilus-private/nautilus-vfs-file.c
@@ -312,6 +312,15 @@ vfs_file_get_date (NautilusFile *file,
 			*date = file->details->mtime;
 		}
 		return TRUE;
+	case NAUTILUS_DATE_TYPE_TRASHED:
+		/* Before we have info on a file, the date is unknown. */
+		if (file->details->trash_time == 0) {
+			return FALSE;
+		}
+		if (date != NULL) {
+			*date = file->details->trash_time;
+		}
+		return TRUE;
 	case NAUTILUS_DATE_TYPE_PERMISSIONS_CHANGED:
 		/* Before we have info on a file, the date is unknown. */
 		if (file->details->mtime == 0 || file->details->ctime == 0) {
diff --git a/src/file-manager/fm-actions.h b/src/file-manager/fm-actions.h
index 002a250..f00a367 100644
--- a/src/file-manager/fm-actions.h
+++ b/src/file-manager/fm-actions.h
@@ -106,5 +106,6 @@
 #define FM_ACTION_STRETCH "Stretch"
 #define FM_ACTION_UNSTRETCH "Unstretch"
 #define FM_ACTION_ZOOM_ITEMS "Zoom Items"
+#define FM_ACTION_SORT_TRASH_TIME "Sort by Trash Time"
 
 #endif /* FM_ACTIONS_H */
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index e8744ca..782e89f 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -150,6 +150,13 @@ static const SortCriterion sort_criteria[] = {
 		"Sort by Emblems",
 		N_("by _Emblems"),
 		N_("Keep icons sorted by emblems in rows")
+	},
+	{
+		NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
+		"trashed",
+		"Sort by Trash Time",
+		N_("by T_rash Time"),
+		N_("Keep icons sorted by trash time in rows")
 	}
 };
 
@@ -617,12 +624,14 @@ update_layout_menus (FMIconView *view)
 	gboolean is_auto_layout;
 	GtkAction *action;
 	const char *action_name;
+	NautilusFile *file;
 
 	if (view->details->icon_action_group == NULL) {
 		return;
 	}
 
 	is_auto_layout = fm_icon_view_using_auto_layout (view);
+	file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (view));
 
 	if (fm_icon_view_supports_auto_layout (view)) {
 		/* Mark sort criterion. */
@@ -643,6 +652,15 @@ update_layout_menus (FMIconView *view)
 		gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
 					      view->details->sort_reversed);
 		gtk_action_set_sensitive (action, is_auto_layout);
+
+		action = gtk_action_group_get_action (view->details->icon_action_group,
+		                                      FM_ACTION_SORT_TRASH_TIME);
+
+		if (file != NULL && nautilus_file_is_in_trash (file)) {
+			gtk_action_set_visible (action, TRUE);
+		} else {
+			gtk_action_set_visible (action, FALSE);
+		}
 	}
 
 	action = gtk_action_group_get_action (view->details->icon_action_group,
@@ -1550,6 +1568,10 @@ static const GtkRadioActionEntry arrange_radio_entries[] = {
     N_("By _Emblems"), NULL,
     N_("Keep icons sorted by emblems in rows"),
     NAUTILUS_FILE_SORT_BY_EMBLEMS },
+  { "Sort by Trash Time", NULL,
+    N_("By T_rash Time"), NULL,
+    N_("Keep icons sorted by trash time in rows"),
+    NAUTILUS_FILE_SORT_BY_TRASHED_TIME },
 };
 
 static void
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index 9ebce75..1bab954 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -155,6 +155,14 @@ G_DEFINE_TYPE_WITH_CODE (FMListView, fm_list_view, FM_TYPE_DIRECTORY_VIEW,
 			 G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_VIEW,
 						fm_list_view_iface_init));
 
+static const char * default_trash_visible_columns[] = {
+	"name", "size", "type", "trashed_on", "trash_orig_path", NULL
+};
+
+static const char * default_trash_columns_order[] = {
+	"name", "size", "type", "trashed_on", "trash_orig_path", NULL
+};
+
 /* for EEL_CALL_PARENT */
 #define parent_class fm_list_view_parent_class
 
@@ -1258,15 +1266,19 @@ apply_columns_settings (FMListView *list_view,
 			char **visible_columns)
 {
 	GList *all_columns;
+	NautilusFile *file;
 	GList *old_view_columns, *view_columns;
 	GHashTable *visible_columns_hash;
 	GtkTreeViewColumn *prev_view_column;
 	GList *l;
 	int i;
 
+	file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view));
+
 	/* prepare ordered list of view columns using column_order and visible_columns */
 	view_columns = NULL;
-	all_columns = nautilus_get_all_columns ();
+
+	all_columns = nautilus_get_columns_for_file (file);
 	all_columns = nautilus_sort_columns (all_columns, column_order);
 
 	/* hash table to lookup if a given column should be visible */
@@ -1606,7 +1618,13 @@ get_visible_columns (FMListView *list_view)
 		g_list_free (visible_columns);
 	}
 
-	return ret ? ret : g_strdupv (default_visible_columns_auto_value);
+	if (ret != NULL) {
+		return ret;
+	}
+
+	return nautilus_file_is_in_trash (file) ?
+		g_strdupv ((gchar **) default_trash_visible_columns) :
+		g_strdupv (default_visible_columns_auto_value);
 }
 
 static char **
@@ -1638,7 +1656,13 @@ get_column_order (FMListView *list_view)
 		g_list_free (column_order);
 	}
 
-	return ret ? ret : g_strdupv (default_visible_columns_auto_value);
+	if (ret != NULL) {
+		return ret;
+	}
+
+	return nautilus_file_is_in_trash (file) ?
+		g_strdupv ((gchar **) default_trash_columns_order) :
+		g_strdupv (default_column_order_auto_value);
 }
 
 static void
@@ -2128,27 +2152,37 @@ column_chooser_changed_callback (NautilusColumnChooser *chooser,
 }
 
 static void
+column_chooser_set_from_arrays (NautilusColumnChooser *chooser,
+                                FMListView *view,
+                                char **visible_columns,
+                                char **column_order)
+{
+	g_signal_handlers_block_by_func 
+		(chooser, G_CALLBACK (column_chooser_changed_callback), view);
+
+	nautilus_column_chooser_set_settings (chooser,
+					      visible_columns, 
+					      column_order);
+
+	g_signal_handlers_unblock_by_func 
+		(chooser, G_CALLBACK (column_chooser_changed_callback), view);
+}
+
+static void
 column_chooser_set_from_settings (NautilusColumnChooser *chooser,
 				  FMListView *view)
 {
 	char **visible_columns;
 	char **column_order;
 
-	g_signal_handlers_block_by_func 
-		(chooser, G_CALLBACK (column_chooser_changed_callback), view);
-
 	visible_columns = get_visible_columns (view);
 	column_order = get_column_order (view);
 
-	nautilus_column_chooser_set_settings (chooser,
-					      visible_columns, 
-					      column_order);
+	column_chooser_set_from_arrays (chooser, view,
+	                                visible_columns, column_order);
 
 	g_strfreev (visible_columns);
 	g_strfreev (column_order);
-
-	g_signal_handlers_unblock_by_func 
-		(chooser, G_CALLBACK (column_chooser_changed_callback), view);
 }
 
 static void
@@ -2156,6 +2190,8 @@ column_chooser_use_default_callback (NautilusColumnChooser *chooser,
 				     FMListView *view)
 {
 	NautilusFile *file;
+	char **default_columns;
+	char **default_order;
 
 	file = fm_directory_view_get_directory_as_file 
 		(FM_DIRECTORY_VIEW (view));
@@ -2163,8 +2199,23 @@ column_chooser_use_default_callback (NautilusColumnChooser *chooser,
 	nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, NULL);
 	nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, NULL);
 
-	set_columns_settings_from_metadata_and_preferences (FM_LIST_VIEW (view));
-	column_chooser_set_from_settings (chooser, view);
+	/* set view values ourselves, as new metadata could not have been
+	 * updated yet.
+	 */
+	default_columns = nautilus_file_is_in_trash (file) ?
+		g_strdupv ((gchar **) default_trash_visible_columns) :
+		g_strdupv (default_visible_columns_auto_value);
+
+	default_order = nautilus_file_is_in_trash (file) ?
+		g_strdupv ((gchar **) default_trash_columns_order) :
+		g_strdupv (default_column_order_auto_value);
+
+	apply_columns_settings (view, default_order, default_columns);
+	column_chooser_set_from_arrays (chooser, view,
+	                                default_columns, default_order);
+
+	g_strfreev (default_columns);
+	g_strfreev (default_order);
 }
 
 static GtkWidget *
@@ -2218,7 +2269,7 @@ create_column_editor (FMListView *view)
 	gtk_widget_show (alignment);
 	gtk_box_pack_start (GTK_BOX (box), alignment, TRUE, TRUE, 0);
 
-	column_chooser = nautilus_column_chooser_new ();
+	column_chooser = nautilus_column_chooser_new (file);
 	gtk_widget_show (column_chooser);
 	gtk_container_add (GTK_CONTAINER (alignment), column_chooser);
 
diff --git a/src/file-manager/nautilus-icon-view-ui.xml b/src/file-manager/nautilus-icon-view-ui.xml
index 9897f9e..179df40 100644
--- a/src/file-manager/nautilus-icon-view-ui.xml
+++ b/src/file-manager/nautilus-icon-view-ui.xml
@@ -16,6 +16,7 @@
 					<menuitem name="Sort by Type" action="Sort by Type"/>
 					<menuitem name="Sort by Modification Date" action="Sort by Modification Date"/>
 					<menuitem name="Sort by Emblems" action="Sort by Emblems"/>
+					<menuitem name="Sort by Trash Time" action="Sort by Trash Time"/>
 				</placeholder>
 				<separator name="Layout separator"/>
 				<menuitem name="Tighter Layout" action="Tighter Layout"/>
@@ -38,6 +39,7 @@
 					<menuitem name="Sort by Type" action="Sort by Type"/>
 					<menuitem name="Sort by Modification Date" action="Sort by Modification Date"/>
 					<menuitem name="Sort by Emblems" action="Sort by Emblems"/>
+					<menuitem name="Sort by Trash Time" action="Sort by Trash Time"/>
 				</placeholder>
 				<separator name="Layout separator"/>
 				<menuitem name="Tighter Layout" action="Tighter Layout"/>
diff --git a/src/nautilus-file-management-properties.c b/src/nautilus-file-management-properties.c
index 3166fe3..7d9ea3e 100644
--- a/src/nautilus-file-management-properties.c
+++ b/src/nautilus-file-management-properties.c
@@ -426,7 +426,7 @@ nautilus_file_management_properties_dialog_setup_icon_caption_page (GtkBuilder *
 	
 	writable = eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS);
 
-	columns = nautilus_get_all_columns ();
+	columns = nautilus_get_common_columns ();
 	
 	for (i = 0; icon_captions_components[i] != NULL; i++) {
 		GtkWidget *combo_box;
@@ -506,7 +506,7 @@ nautilus_file_management_properties_dialog_setup_list_column_page (GtkBuilder *b
 	GtkWidget *chooser;
 	GtkWidget *box;
 	
-	chooser = nautilus_column_chooser_new ();
+	chooser = nautilus_column_chooser_new (NULL);
 	g_signal_connect (chooser, "changed", 
 			  G_CALLBACK (columns_changed_callback), chooser);
 	g_signal_connect (chooser, "use_default", 
