diff --git a/libnautilus-private/nautilus-progress-info.c b/libnautilus-private/nautilus-progress-info.c
index ac182d8..f856873 100644
--- a/libnautilus-private/nautilus-progress-info.c
+++ b/libnautilus-private/nautilus-progress-info.c
@@ -204,11 +204,26 @@ status_icon_activate_cb (GtkStatusIcon *icon,
 	}
 }
 
+static char *
+create_progress_string_for_n_ops (double progress, int n_ops)
+{
+	if (n_ops > 1) {
+		return g_strdup_printf (_("%d%% of %'d - File Operations"),
+					(int) (progress * 100), n_ops);
+	}
+	if (n_ops == 1) {
+		return g_strdup_printf (_("%d%% - File Operations"),
+					(int) (progress * 100));
+	}
+	return g_strdup (_("File Operations"));
+}
+
 static GtkWidget *
 get_progress_window (void)
 {
 	static GtkWidget *progress_window = NULL;
 	GtkWidget *vbox;
+	char *window_title;
 	
 	if (progress_window != NULL) {
 		return progress_window;
@@ -219,8 +234,9 @@ get_progress_window (void)
 				  FALSE);
 	gtk_container_set_border_width (GTK_CONTAINER (progress_window), 10);
  
-	gtk_window_set_title (GTK_WINDOW (progress_window),
-			      _("File Operations"));
+	window_title = create_progress_string_for_n_ops (0.0, 0);
+	gtk_window_set_title (GTK_WINDOW (progress_window), window_title);
+	g_free (window_title);
 	gtk_window_set_wmclass (GTK_WINDOW (progress_window),
 				"file_progress", "Nautilus");
 	gtk_window_set_position (GTK_WINDOW (progress_window),
@@ -250,6 +266,48 @@ get_progress_window (void)
 	return progress_window;
 }
 
+static void
+update_status_icon_and_window (void)
+{
+	double	 progress;
+	double	 total_progress;
+	int	 n_valid_progress_ops;
+	GList	*l, *active_progress_infos_copy;
+	char	*progress_string;
+
+	total_progress	     = 0.0;
+	n_valid_progress_ops = 0;
+
+	if (n_progress_ops == 0) {
+		gtk_status_icon_set_visible (status_icon, FALSE);
+		gtk_widget_hide (get_progress_window ());
+		goto set_strings;
+	} else {
+		gtk_status_icon_set_visible (status_icon, TRUE);
+	}
+
+	active_progress_infos_copy = nautilus_get_all_progress_info ();
+
+	for (l = active_progress_infos_copy; 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;
+		}
+	}
+
+	eel_g_object_list_free (active_progress_infos_copy);
+
+	total_progress = total_progress / n_valid_progress_ops;
+
+ set_strings:
+	progress_string = create_progress_string_for_n_ops (total_progress,
+							    n_valid_progress_ops);
+	gtk_window_set_title (GTK_WINDOW (get_progress_window ()),
+			      progress_string);
+	gtk_status_icon_set_tooltip_text (status_icon, progress_string);
+	g_free (progress_string);
+}
 
 typedef struct {
 	GtkWidget *widget;
@@ -294,26 +352,7 @@ update_progress (ProgressWidgetData *data)
 	} else {
 		gtk_progress_bar_set_fraction (data->progress_bar, progress);
 	}
-}
-
-static void
-update_status_icon_and_window (void)
-{
-	char *tooltip;
-
-	tooltip = g_strdup_printf (ngettext ("%'d file operation active",
-					     "%'d file operations active",
-					     n_progress_ops),
-				   n_progress_ops);
-	gtk_status_icon_set_tooltip_text (status_icon, tooltip);
-	g_free (tooltip);
-	
-	if (n_progress_ops == 0) {
-		gtk_status_icon_set_visible (status_icon, FALSE);
-		gtk_widget_hide (get_progress_window ());
-	} else {
-		gtk_status_icon_set_visible (status_icon, TRUE);
-	}
+	update_status_icon_and_window ();
 }
 
 static void
