diff --git a/lib/error.php b/lib/error.php
index dcafd3c2d245abc1eda551a0abba275935b653e8..fb516bb8c9b4da52ae73c608b07a72e606dbda6a 100644
--- a/lib/error.php
+++ b/lib/error.php
@@ -23,6 +23,13 @@ function message_flash($message) {
     $messages['info'][] = $message;
 }
 
+function message_flash_postponed($message) {
+	global $session;
+	$session->data['messages']['info'][] = $message;
+	$session->save(); 
+}
+
+
 set_error_handler("handle_messages", (E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE));
 
 // empty messages array was causing PHP to spew notices
diff --git a/lib/session.php b/lib/session.php
index a0f461c1e2422678914ad27b767df140ae80028e..da7c10845444ad7fc65e2eb63efd161942f8a248 100644
--- a/lib/session.php
+++ b/lib/session.php
@@ -153,6 +153,18 @@ private $datahash='';		// hash of data field
 
 		// update time stamp
 		$DB->Execute( "update {$this->table} set lastseen=NOW() where hash=?", array($this->token));
+
+		// check to see if there any messages stored for this user
+		if (isset($this->data['messages'])) {
+			global $messages;
+			if (is_array($messages)) {
+				$messages += $this->data['messages']; 
+			} else {
+				$messages = $this->data['messages'];
+			}
+			unset($this->data['messages']);
+			$this->save();
+		}
 	}
 	
 	// generate a string suitable to be used as a session ID