=== modified file 'includes/bootstrap.inc'
--- includes/bootstrap.inc	Tue Apr 03 22:16:52 2007
+++ includes/bootstrap.inc	Tue Apr 03 21:38:57 2007
@@ -685,7 +685,7 @@ function watchdog($type, $message, $seve
  *   - 'status'
  *   - 'error'
  */
-function drupal_set_message($message = NULL, $type = 'status') {
+function drupal_set_message($message = NULL, $type = 'status', $message_key = NULL) {
   if ($message) {
     if (!isset($_SESSION['messages'])) {
       $_SESSION['messages'] = array();
@@ -695,7 +695,12 @@ function drupal_set_message($message = N
       $_SESSION['messages'][$type] = array();
     }
 
-    $_SESSION['messages'][$type][] = $message;
+    if (isset($message_key)) {
+      $_SESSION['messages'][$type][$message_key] = $message;
+    }
+    else {    
+      $_SESSION['messages'][$type][] = $message;
+    }
   }
 
   // messages not set when DB connection fails
@@ -716,12 +721,14 @@ function drupal_get_messages($type = NUL
       if ($clear_queue) {
          unset($_SESSION['messages'][$type]);
       }
+      drupal_alter('message', $messages);
       return array($type => $messages[$type]);
     }
     else {
       if ($clear_queue) {
          unset($_SESSION['messages']);
       }
+      drupal_alter('message', $messages);
       return $messages;
     }
   }


=== modified file 'includes/theme.inc'
--- includes/theme.inc	Tue Apr 03 22:16:56 2007
+++ includes/theme.inc	Tue Apr 03 21:23:50 2007
@@ -558,7 +558,9 @@ function theme_status_messages($display 
       $output .= " </ul>\n";
     }
     else {
-      $output .= $messages[0];
+      // Need to shift array since key of the first element is unknown.
+      $output .= array_shift($messages);
     }
     $output .= "</div>\n";
   }
