Index: src/bp-templates/bp-legacy/buddypress-functions.php
===================================================================
--- src/bp-templates/bp-legacy/buddypress-functions.php	(revision 9125)
+++ src/bp-templates/bp-legacy/buddypress-functions.php	(working copy)
@@ -171,6 +171,9 @@
 			'messages_markread'             => 'bp_legacy_theme_ajax_message_markread',
 			'messages_markunread'           => 'bp_legacy_theme_ajax_message_markunread',
 			'messages_send_reply'           => 'bp_legacy_theme_ajax_messages_send_reply',
+
+			//Notifications
+			'notifications_bulk_management' => 'bp_legacy_theme_ajax_notifications_bulk_management',
 		);
 
 		/**
@@ -1449,3 +1452,50 @@
 
 	exit;
 }
+
+/**
+ * Handles bulk management (mark as read/unread, delete) of notifications via a POST request.
+ *
+ * @return String HTML
+ * @since BuddyPress (2.2)
+ */
+function bp_legacy_theme_ajax_notifications_bulk_management() {
+
+	// Bail if not a POST action
+	if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
+		return;
+
+	check_ajax_referer( 'notifications_bulk_nonce', 'notifications_bulk_nonce' );
+
+	if ( ! isset( $_POST['notification_ids'] ) ) {
+		echo "-1<div id='message' class='error'><p>" . __( 'There was a problem managing your notifications.', 'buddypress' ) . '</p></div>';
+
+	} else {
+		$notifications = explode( ',', $_POST['notification_ids'] );
+
+		switch ( $_POST['do_action'] ) :
+			case 'delete' :
+				for ( $i = 0, $count = count( $notifications ); $i < $count; ++$i ) {
+					bp_notifications_delete_notification( (int) $notifications[$i] );
+				}
+				_e( 'Notifications deleted', 'buddypress' );
+				break;
+
+			case 'read' :
+				for ( $i = 0, $count = count( $notifications ); $i < $count; ++$i ) {
+					bp_notifications_mark_notification( (int) $notifications[$i], false );
+				}
+				_e( 'Notifications marked as read', 'buddypress' );
+				break;
+
+			case 'unread' :
+				for ( $i = 0, $count = count( $notifications ); $i < $count; ++$i ) {
+					bp_notifications_mark_notification( (int) $notifications[$i], true );
+				}
+				_e( 'Notifications marked as unread', 'buddypress' );
+				break;
+		endswitch;
+	}
+
+	exit;
+}
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,67 @@
 		return false;
 	});
 
+	/* Bulk manage notifications */
+	jq( 'body.notifications #notification-bulk-manage' ).on( 'click', function() {
+
+		checkboxes_tosend = '';
+		checkboxes = jq('table.notifications tr td input[type="checkbox"]');
+
+		jq('#message').remove();
+		jq(this).addClass('loading');
+
+		jq(checkboxes).each( function(i) {
+			if( jq(this).is(':checked') ) {
+				checkboxes_tosend += jq(this).attr('value') + ',';
+			}
+		});
+
+		if ( '' === checkboxes_tosend ) {
+			jq(this).removeClass('loading');
+			return false;
+		}
+
+		jq.post( ajaxurl, {
+			action: 'notifications_bulk_management',
+			'notification_ids': checkboxes_tosend,
+			'notifications_bulk_nonce': jq('#notifications_bulk_nonce').attr('value'),
+			'do_action': jq('#notification-select').val()
+		}, function(response) {
+			if ( response[0] + response[1] === '-1' ) {
+				jq('table.notifications').prepend( response.substr( 2, response.length ) );
+			} else {
+				jq('table.notifications').before( '<div id="message" class="updated"><p>' + response + '</p></div>' );
+
+				jq(checkboxes).each( function(i) {
+					if( jq(this).is(':checked') ) {
+						// We need to uncheck because message is only hidden
+						// Otherwise, AJAX will be fired again with same data
+						jq(this).prop( 'checked', false );
+						jq(this).parent().parent().fadeOut(150);
+					}
+				});
+			}
+
+			jq('#message').hide().slideDown(150);
+			jq('#notification-bulk-manage').removeClass('loading');
+		});
+
+		return false;
+	});
+
+	/* Selecting/Deselcting 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)
@@ -5,6 +5,7 @@
 			<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>
+			<th><?php _e( 'Select all',    'buddypress' ); ?> <input id="select-all-notifications" type="checkbox"></th>
 		</tr>
 	</thead>
 
@@ -17,9 +18,14 @@
 				<td><?php bp_the_notification_description();  ?></td>
 				<td><?php bp_the_notification_time_since();   ?></td>
 				<td><?php bp_the_notification_action_links(); ?></td>
+				<td><input id="<?php bp_the_notification_id(); ?>" type="checkbox" name="notifications[]" value="<?php bp_the_notification_id(); ?>" class="notification-check"></td>
 			</tr>
 
 		<?php endwhile; ?>
 
 	</tbody>
-</table>
\ No newline at end of file
+</table>
+
+<div class="notifications-options-nav">
+	<?php bp_notifications_bulk_management(); ?>
+</div><!-- .notifications-options-nav -->
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,25 @@
 
 <?php
 }
+
+/**
+ * Output the form for bulk management of notifications
+ *
+ * @since BuddyPress (2.2.0)
+ */
+function bp_notifications_bulk_management() {
+
+	wp_nonce_field( 'notifications_bulk_nonce', 'notifications_bulk_nonce' );
+?>
+
+	<select name="notification-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 _e( 'Apply', 'buddypress' ); ?>">
+<?php
+}
