diff --git a/includes/batch.inc b/includes/batch.inc
index cced0b4267f6f871d4b0bf549ce505d871888bed..cd2127f0be42ea8bf5a7c5af12d86069b33d2e3b 100644
--- a/includes/batch.inc
+++ b/includes/batch.inc
@@ -133,7 +133,7 @@ function _batch_progress_page_nojs() {
     // followed by the error message.
     ob_start();
     $fallback = $current_set['error_message'] .'<br/>'. $batch['error_message'];
-    $fallback = theme('maintenance_page', $fallback, FALSE);
+    $fallback = theme('maintenance_page', $fallback, FALSE, FALSE);
 
     // We strip the end of the page using a marker in the template, so any
     // additional HTML output by PHP shows up inside the page rather than
diff --git a/update.php b/update.php
index 6ade05465724b1d2b3ae5c7d58fbb4678caa131b..4c9a18290941c1957ef4a140cc651ab7ebe00058 100644
--- a/update.php
+++ b/update.php
@@ -723,5 +723,7 @@ function update_task_list($active = NULL) {
   $output = update_access_denied_page();
 }
 if (isset($output) && $output) {
-  print theme('update_page', $output);
+  // We defer the display of messages until all updates are done.
+  $progress_page = ($batch = batch_get()) && isset($batch['running']);
+  print theme('update_page', $output, !$progress_page);
 }