diff --git a/delta_blocks/delta_blocks.install b/delta_blocks/delta_blocks.install
index 2f0a239..68dad3b 100644
--- a/delta_blocks/delta_blocks.install
+++ b/delta_blocks/delta_blocks.install
@@ -39,4 +39,11 @@ function delta_blocks_install() {
   variable_set('delta_blocks_branding_site_slogan_hidden', FALSE);
   variable_set('delta_blocks_breadcrumb_title_hidden', TRUE);
   variable_set('delta_blocks_breadcrumb_current', TRUE);
-}
\ No newline at end of file
+}
+
+/**
+ * Clear the cache for the hook_page_alter() implementation to be noticed.
+ */
+function delta_blocks_update_7300(&$sandbox) {
+  cache_clear_all();
+}
diff --git a/delta_blocks/delta_blocks.module b/delta_blocks/delta_blocks.module
index d73a2b1..46d695c 100644
--- a/delta_blocks/delta_blocks.module
+++ b/delta_blocks/delta_blocks.module
@@ -295,6 +295,26 @@ function delta_blocks_preprocess_block(&$vars) {
 }
 
 /**
+ * Implements hook_page_alter().
+ */
+function delta_blocks_page_alter(&$page) {
+  foreach (element_children($page) as $region) {
+    foreach (element_children($page[$region]) as $block_id) {
+      if ($block_id == 'delta_blocks_messages') {
+        // Set the messages here so we're confident we've got all messages.
+        $page[$region][$block_id]['#markup'] = theme('status_messages');
+
+        // It's possible there are no messages, so remove the block if that's the case.
+        if (empty($page[$region][$block_id]['#markup'])) {
+          unset($page[$region][$block_id]);
+        }
+        break;
+      }
+    }
+  }
+}
+
+/**
  * Provides individual block content.
  */
 function delta_blocks_get_content($delta) {
@@ -340,7 +360,7 @@ function delta_blocks_get_content($delta) {
       return theme('delta_blocks_breadcrumb', $variables);
 
     case 'messages':
-      return theme('status_messages');
+      return '<!-- messages -->';
 
     case 'tabs':
       $variables['primary'] = menu_primary_local_tasks();
