diff --git a/libnautilus-private/nautilus-progress-info.c b/libnautilus-private/nautilus-progress-info.c
index ac182d8..24243a7 100644
--- a/libnautilus-private/nautilus-progress-info.c
+++ b/libnautilus-private/nautilus-progress-info.c
@@ -250,6 +250,45 @@ get_progress_window (void)
 	return progress_window;
 }
 
+static void
+reset_progress_window_title (void)
+{
+	gtk_window_set_title (GTK_WINDOW (get_progress_window ()),
+			      _("File Operations"));
+}
+
+static void
+update_progress_window_title (void)
+{
+	double	 progress;
+	double	 total_progress;
+	int	 n_valid_progress_ops;
+	GList	*l;
+	char	*window_title;
+
+	total_progress	     = 0.0;
+	n_valid_progress_ops = 0;
+
+	for (l = active_progress_infos; l != NULL; l = l->next) {
+		progress = nautilus_progress_info_get_progress (l->data);
+		if (progress >= 0.0) {
+			total_progress += progress;
+			n_valid_progress_ops += 1;
+		}
+	}
+
+	if (n_valid_progress_ops > 0) {
+		total_progress = total_progress / n_valid_progress_ops;
+		window_title = g_strdup_printf (_("%d%% of %'d - File Operations"),
+						(int) (total_progress * 100),
+						n_valid_progress_ops);
+		gtk_window_set_title (GTK_WINDOW (get_progress_window ()),
+				      window_title);
+		g_free (window_title);
+	} else {
+		reset_progress_window_title ();
+	}
+}
 
 typedef struct {
 	GtkWidget *widget;
@@ -294,6 +333,8 @@ update_progress (ProgressWidgetData *data)
 	} else {
 		gtk_progress_bar_set_fraction (data->progress_bar, progress);
 	}
+
+	update_progress_window_title ();
 }
 
 static void
@@ -311,6 +352,7 @@ update_status_icon_and_window (void)
 	if (n_progress_ops == 0) {
 		gtk_status_icon_set_visible (status_icon, FALSE);
 		gtk_widget_hide (get_progress_window ());
+		reset_progress_window_title ();
 	} else {
 		gtk_status_icon_set_visible (status_icon, TRUE);
 	}
