diff --git a/includes/theme.inc b/includes/theme.inc
index ed34b82..43bcd0e 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -1691,7 +1691,7 @@ function theme_status_messages($variables) {
       $output .= " </ul>\n";
     }
     else {
-      $output .= $messages[0];
+      $output .= reset($messages);
     }
     $output .= "</div>\n";
   }
diff --git a/modules/simpletest/tests/system_test.module b/modules/simpletest/tests/system_test.module
index c0eed03..8c44329 100644
--- a/modules/simpletest/tests/system_test.module
+++ b/modules/simpletest/tests/system_test.module
@@ -78,6 +78,13 @@ function system_test_menu() {
     'type' => MENU_CALLBACK,
   );
 
+  $items['system-test/drupal-set-message'] = array(
+    'title' => 'Set messages with drupal_set_message()',
+    'page callback' => 'system_test_drupal_set_message',
+    'access callback' => TRUE,
+    'type' => MENU_CALLBACK,
+  );
+
   $items['system-test/main-content-handling'] = array(
     'title' => 'Test main content handling',
     'page callback' => 'system_test_main_content_fallback',
@@ -436,6 +443,20 @@ function system_test_authorize_init_page($page_title) {
 }
 
 /**
+ * Sets two messages and removes the first one before the messages are displayed.
+ */
+function system_test_drupal_set_message() {
+  // Set two messages.
+  drupal_set_message('First message (removed).');
+  drupal_set_message('Second message (not removed).');
+
+  // Remove the first.
+  unset($_SESSION['messages']['status'][0]);
+
+  return '';
+}
+
+/**
  * Page callback to print out $_GET['destination'] for testing.
  */
 function system_test_get_destination() {
diff --git a/modules/system/system.test b/modules/system/system.test
index dcc86e5..3e26bae 100644
--- a/modules/system/system.test
+++ b/modules/system/system.test
@@ -2827,6 +2827,35 @@ class SystemValidTokenTest extends DrupalUnitTestCase {
 }
 
 /**
+ * Tests drupal_set_message() and related functions.
+ */
+class DrupalSetMessageTest extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Messages',
+      'description' => 'Tests that messages can be displayed using drupal_set_message().',
+      'group' => 'System',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('system_test');
+  }
+
+  /**
+   * Tests setting messages and removing one before it is displayed.
+   */
+  function testSetRemoveMessages() {
+    // The page at system-test/drupal-set-message sets two messages and then
+    // removes the first before it is displayed.
+    $this->drupalGet('system-test/drupal-set-message');
+    $this->assertNoText('First message (removed).');
+    $this->assertText('Second message (not removed).');
+  }
+}
+
+/**
  * Tests confirm form destinations.
  */
 class ConfirmFormTest extends DrupalWebTestCase {
