Index: bp-messages/bp-messages-cache.php
===================================================================
--- bp-messages/bp-messages-cache.php
+++ bp-messages/bp-messages-cache.php
@@ -22,3 +22,16 @@ add_action( 'messages_message_sent',   'bp_core_clear_cache' );
 add_action( 'messages_screen_compose', 'bp_core_clear_cache' );
 add_action( 'messages_screen_sentbox', 'bp_core_clear_cache' );
 add_action( 'messages_screen_inbox',   'bp_core_clear_cache' );
+
+/**
+ * Invalidates cache for notices.
+ * 
+ * Currently, invalidates active notice cache.
+ *
+ * @since BuddyPress (2.0.0)
+ */
+function bp_notices_clear_cache( $notice ) {
+	wp_cache_delete( 'active_notice', 'bp_messages' );
+}
+add_action( 'messages_notice_after_save',    'bp_notices_clear_cache' );
+add_action( 'messages_notice_before_delete', 'bp_notices_clear_cache' );
\ No newline at end of file
Index: bp-messages/bp-messages-classes.php
===================================================================
--- bp-messages/bp-messages-classes.php
+++ bp-messages/bp-messages-classes.php
@@ -577,6 +577,8 @@ class BP_Messages_Notice {
 	public function delete() {
 		global $wpdb, $bp;
 
+		do_action_ref_array( 'messages_notice_before_delete', array( &$this ) );
+
 		$sql = $wpdb->prepare( "DELETE FROM {$bp->messages->table_name_notices} WHERE id = %d", $this->id );
 
 		if ( ! $wpdb->query( $sql ) ) {
@@ -643,10 +645,17 @@ class BP_Messages_Notice {
 	 * @return object The BP_Messages_Notice object
 	 */
 	public static function get_active() {
-		global $wpdb, $bp;
+		$notice = wp_cache_get( 'active_notice', 'bp_messages' );
+
+		if ( false === $notice ) {
+			global $wpdb, $bp;
 
-		$notice_id = $wpdb->get_var( "SELECT id FROM {$bp->messages->table_name_notices} WHERE is_active = 1" );
+			$notice_id = $wpdb->get_var( "SELECT id FROM {$bp->messages->table_name_notices} WHERE is_active = 1" );
+			$notice    = new BP_Messages_Notice( $notice_id );
+
+			wp_cache_set( 'active_notice', $notice, 'bp_messages' );
+		}
 
-		return new BP_Messages_Notice( $notice_id );
+		return $notice;
 	}
 }
Index: tests/testcases/messages/class.bp-messages-notice.php
new file mode 100644
===================================================================
--- tests/testcases/messages/class.bp-messages-notice.php 
+++ tests/testcases/messages/class.bp-messages-notice.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * @group notices
+ */
+class BP_Tests_BP_Messages_Notice_TestCases extends BP_UnitTestCase {
+
+	protected $old_current_user = 0;
+
+	public function setUp() {
+		parent::setUp();
+		$this->old_current_user = get_current_user_id();
+		$this->set_current_user( $this->create_user( array( 'role' => 'administrator' ) ) );
+	}
+
+	public function tearDown() {
+		parent::tearDown();
+		$this->set_current_user( $this->old_current_user );
+	}
+
+	/**
+	 * @group cache
+	 */
+	public function test_get_active_notices() {
+		// send notice
+		$subject = 'Test notice';
+		$message = 'This is a notice';
+		messages_send_notice( $subject, $message );
+
+		// now get the active notice and assert
+		$notice = BP_Messages_Notice::get_active();
+		$this->assertEquals( $subject, $notice->subject );
+		$this->assertEquals( $message, $notice->message );
+
+		// deactivate notice and make sure cache is invalidated
+		$notice->deactivate();
+		$this->assertFalse( wp_cache_get( 'active_notice', 'bp_messages' ) );
+
+		// create a new notice
+		$subject2 = 'Another notice';
+		$message2 = 'Say what?';
+		messages_send_notice( $subject2, $message2 );
+
+		// now get the new active notice
+		BP_Messages_Notice::get_active();
+		
+		// grab the cache and make sure it equals our new notice
+		$cache = wp_cache_get( 'active_notice', 'bp_messages' );
+		$this->assertEquals( $subject2, $cache->subject );
+		$this->assertEquals( $message2, $cache->message );
+	}
+
+}
