Index: src/bp-templates/bp-legacy/js/buddypress.js
===================================================================
--- src/bp-templates/bp-legacy/js/buddypress.js	(revision 9125)
+++ src/bp-templates/bp-legacy/js/buddypress.js	(working copy)
@@ -1525,6 +1525,19 @@
 		return false;
 	});
 
+	/* Selecting/Deselecting all notifications */
+	jq('#select-all-notifications').click(function(event) {
+		if( this.checked ) {
+			jq('.notification-check').each(function() {
+				this.checked = true;
+			});
+		} else {
+			jq('.notification-check').each(function() {
+				this.checked = false;
+			});
+		}
+	});
+
 	/* Close site wide notices in the sidebar */
 	jq('#close-notice').on( 'click', function() {
 		jq(this).addClass('loading');
Index: src/bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php
===================================================================
--- src/bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php	(revision 9125)
+++ src/bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php	(working copy)
@@ -1,25 +1,33 @@
-<table class="notifications">
-	<thead>
-		<tr>
-			<th class="icon"></th>
-			<th class="title"><?php _e( 'Notification', 'buddypress' ); ?></th>
-			<th class="date"><?php _e( 'Date Received', 'buddypress' ); ?></th>
-			<th class="actions"><?php _e( 'Actions',    'buddypress' ); ?></th>
-		</tr>
-	</thead>
+<form action="" method="post" id="notifications-bulk-management">
+	<table class="notifications">
+		<thead>
+			<tr>
+				<th class="icon"></th>
+				<th><?php _e( 'Select all',    'buddypress' ); ?> <input id="select-all-notifications" type="checkbox"></th>
+				<th class="title"><?php _e( 'Notification', 'buddypress' ); ?></th>
+				<th class="date"><?php _e( 'Date Received', 'buddypress' ); ?></th>
+				<th class="actions"><?php _e( 'Actions',    'buddypress' ); ?></th>
+			</tr>
+		</thead>
 
-	<tbody>
+		<tbody>
 
-		<?php while ( bp_the_notifications() ) : bp_the_notification(); ?>
+			<?php while ( bp_the_notifications() ) : bp_the_notification(); ?>
 
-			<tr>
-				<td></td>
-				<td><?php bp_the_notification_description();  ?></td>
-				<td><?php bp_the_notification_time_since();   ?></td>
-				<td><?php bp_the_notification_action_links(); ?></td>
-			</tr>
+				<tr>
+					<td></td>
+					<td><input id="<?php bp_the_notification_id(); ?>" type="checkbox" name="notifications[]" value="<?php bp_the_notification_id(); ?>" class="notification-check"></td>
+					<td><?php bp_the_notification_description();  ?></td>
+					<td><?php bp_the_notification_time_since();   ?></td>
+					<td><?php bp_the_notification_action_links(); ?></td>
+				</tr>
 
-		<?php endwhile; ?>
+			<?php endwhile; ?>
 
-	</tbody>
-</table>
\ No newline at end of file
+		</tbody>
+	</table>
+	<div class="notifications-options-nav">
+		<?php bp_notifications_bulk_management_dropdown(); ?>
+	</div><!-- .notifications-options-nav -->
+	<?php wp_nonce_field( 'notifications_bulk_nonce', 'notifications_bulk_nonce' ); ?>
+</form>
Index: src/bp-notifications/bp-notifications-template.php
===================================================================
--- src/bp-notifications/bp-notifications-template.php	(revision 9125)
+++ src/bp-notifications/bp-notifications-template.php	(working copy)
@@ -1049,3 +1049,23 @@
 
 <?php
 }
+
+/**
+ * Output the dropdown for bulk management of notifications
+ *
+ * @since BuddyPress (2.2.0)
+ */
+function bp_notifications_bulk_management_dropdown() {
+?>
+
+	<select name="notification_bulk_action" id="notification-select">
+		<?php if ( bp_current_action() == 'unread' ) { ?>
+			<option value="read"><?php _e( 'Mark selected as read', 'buddypress' ); ?></option>
+		<?php } elseif ( bp_current_action() == 'read' ) { ?>
+			<option value="unread"><?php _e( 'Mark selected as unread', 'buddypress' ); ?></option>
+		<?php } ?>
+		<option value="delete"><?php _e( 'Delete selected', 'buddypress' ); ?></option>
+	</select>
+	<input type="submit" id="notification-bulk-manage" class="button action" value="<?php esc_attr_e( 'Apply', 'buddypress' ); ?>">
+<?php
+}
Index: src/bp-notifications/bp-notifications-actions.php
===================================================================
--- src/bp-notifications/bp-notifications-actions.php	(revision 9125)
+++ src/bp-notifications/bp-notifications-actions.php	(working copy)
@@ -121,3 +121,64 @@
 	bp_core_redirect( bp_displayed_user_domain() . bp_get_notifications_slug() . '/' . bp_current_action() . '/' );
 }
 add_action( 'bp_actions', 'bp_notifications_action_delete' );
+
+/**
+ * Handles bulk management (mark as read/unread, delete) of notifications.
+ *
+ * @since BuddyPress (2.2)
+ *
+ * @return bool
+ */
+function bp_notifications_action_bulk_manage() {
+
+	// Bail if not the read or unread screen
+	if ( ! bp_is_notifications_component() || ! ( bp_is_current_action( 'read' ) || bp_is_current_action( 'unread' ) ) ) {
+		return false;
+	}
+
+	// Get the action
+	$action = !empty( $_POST['notification_bulk_action'] ) ? $_POST['notification_bulk_action'] : '';
+	$nonce  = !empty( $_POST['notifications_bulk_nonce'] ) ? $_POST['notifications_bulk_nonce'] : '';
+	$notifications = !empty( $_POST['notifications'] ) ? $_POST['notifications'] : '';
+
+	// Bail if no action or no IDs
+	if ( ( ! in_array( $action, array( 'delete', 'read', 'unread' ) ) ) || empty( $notifications ) || empty( $nonce ) ) {
+		return false;
+	}
+
+	// Check the nonce
+	if ( ! wp_verify_nonce( $nonce, 'notifications_bulk_nonce' ) ) {
+		bp_core_add_message( __( 'There was a problem managing your notifications.', 'buddypress' ) );
+		return false;
+	}
+
+	// Delete, mark as read or unread depending on the user 'action'
+	switch ( $action ) :
+
+		case 'delete' :
+			foreach ( $notifications as $notification ) {
+				bp_notifications_delete_notification( (int) $notification );
+			}
+			bp_core_add_message( __( 'Notifications deleted.', 'buddypress' ) );
+		break;
+
+		case 'read' :
+			foreach ( $notifications as $notification ) {
+				bp_notifications_mark_notification( (int) $notification, false );
+			}
+			bp_core_add_message( __( 'Notifications marked as read', 'buddypress' ) );
+		break;
+
+		case 'unread' :
+			foreach ( $notifications as $notification ) {
+				bp_notifications_mark_notification( (int) $notification, true );
+			}
+			bp_core_add_message( __( 'Notifications marked as unread.', 'buddypress' ) );
+		break;
+
+	endswitch;
+
+	// Redirect
+	bp_core_redirect( bp_displayed_user_domain() . bp_get_notifications_slug() . '/' . bp_current_action() . '/' );
+}
+add_action( 'bp_actions', 'bp_notifications_action_bulk_manage' );
\ No newline at end of file
Index: src/bp-templates/bp-legacy/css/buddypress.css
===================================================================
--- src/bp-templates/bp-legacy/css/buddypress.css	(revision 9125)
+++ src/bp-templates/bp-legacy/css/buddypress.css	(working copy)
@@ -731,6 +731,12 @@
 #buddypress .standard-form #blog-details-section {
 	clear: left;
 }
+#buddypress #notifications-bulk-management {
+	clear: left;
+}
+body.no-js #buddypress #notifications-bulk-management #select-all-notifications {
+	display: none;
+}
 #buddypress .standard-form input:focus,
 #buddypress .standard-form textarea:focus,
 #buddypress .standard-form select:focus {
