diff --git src/bp-activity/bp-activity-admin.php src/bp-activity/bp-activity-admin.php
index 8c745875f..24391450c 100644
--- src/bp-activity/bp-activity-admin.php
+++ src/bp-activity/bp-activity-admin.php
@@ -14,11 +14,8 @@
 defined( 'ABSPATH' ) || exit;
 
 // Include WP's list table class.
-if ( ! class_exists( 'WP_List_Table' ) ) require( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
-
-// Per_page screen option. Has to be hooked in extremely early.
-if ( is_admin() && ! empty( $_REQUEST['page'] ) && 'bp-activity' == $_REQUEST['page'] ) {
-	add_filter( 'set-screen-option', 'bp_activity_admin_screen_options', 10, 3 );
+if ( ! class_exists( 'WP_List_Table' ) ) {
+	require ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
 }
 
 /**
@@ -139,28 +136,6 @@ function bp_activity_admin_reply() {
 }
 add_action( 'wp_ajax_bp-activity-admin-reply', 'bp_activity_admin_reply' );
 
-/**
- * Handle save/update of screen options for the Activity component admin screen.
- *
- * @since 1.6.0
- *
- * @param string $value     Will always be false unless another plugin filters it first.
- * @param string $option    Screen option name.
- * @param string $new_value Screen option form value.
- * @return string|int Option value. False to abandon update.
- */
-function bp_activity_admin_screen_options( $value, $option, $new_value ) {
-	if ( 'toplevel_page_bp_activity_per_page' != $option && 'toplevel_page_bp_activity_network_per_page' != $option )
-		return $value;
-
-	// Per page.
-	$new_value = (int) $new_value;
-	if ( $new_value < 1 || $new_value > 999 )
-		return $value;
-
-	return $new_value;
-}
-
 /**
  * Hide the advanced edit meta boxes by default, so we don't clutter the screen.
  *
diff --git src/bp-core/admin/bp-core-admin-functions.php src/bp-core/admin/bp-core-admin-functions.php
index 465cae72b..9d57ab4c4 100644
--- src/bp-core/admin/bp-core-admin-functions.php
+++ src/bp-core/admin/bp-core-admin-functions.php
@@ -1699,3 +1699,31 @@ function bp_core_admin_format_notifications( $notification = null ) {
 	</div>
 	<?php
 }
+
+/**
+ * Sets the "per page" screen option for BP Items WP Admin lists.
+ *
+ * @since 14.0.0
+ *
+ * @param bool   $value     Will always be false unless another plugin filters it first.
+ * @param string $option    Screen option name.
+ * @param string $new_value Screen option form value.
+ * @return string|int Option value. False to abandon update.
+ */
+function bp_admin_set_screen_options( $value, $option, $new_value ) {
+	// Sanitize the new value.
+	$new_value = (int) $new_value;
+
+	// Make sure it's a reasonable value to paginate results.
+	if ( $new_value < 1 || $new_value > 999 ) {
+		return $value;
+	}
+
+	return $new_value;
+}
+add_filter( 'set_screen_option_toplevel_page_bp_activity_per_page', 'bp_admin_set_screen_options', 10, 3 );
+add_filter( 'set_screen_option_toplevel_page_bp_activity_network_per_page', 'bp_admin_set_screen_options', 10, 3 );
+add_filter( 'set_screen_option_toplevel_page_bp_groups_per_page', 'bp_admin_set_screen_options', 10, 3 );
+add_filter( 'set_screen_option_toplevel_page_bp_groups_network_per_page', 'bp_admin_set_screen_options', 10, 3 );
+add_filter( 'set_screen_option_tools_page_bp_optouts_per_page', 'bp_admin_set_screen_options', 10, 3 );
+add_filter( 'set_screen_option_tools_page_bp_optouts_network_per_page', 'bp_admin_set_screen_options', 10, 3 );
diff --git src/bp-core/deprecated/14.0.php src/bp-core/deprecated/14.0.php
index 2bf74e41e..016615243 100644
--- src/bp-core/deprecated/14.0.php
+++ src/bp-core/deprecated/14.0.php
@@ -84,3 +84,37 @@ function bp_admin_email_add_codex_notice() {
 		'error'
 	);
 }
+
+/**
+ * Handle save/update of screen options for the Activity component admin screen.
+ *
+ * @since 1.6.0
+ * @deprecated 14.0.0
+ *
+ * @param string $value     Will always be false unless another plugin filters it first.
+ * @param string $option    Screen option name.
+ * @param string $new_value Screen option form value.
+ * @return string|int Option value. False to abandon update.
+ */
+function bp_activity_admin_screen_options( $value, $option, $new_value ) {
+	_deprecated_function( __FUNCTION__, '14.0.0', 'bp_admin_set_screen_options' );
+
+	return bp_admin_set_screen_options( $value, $option, $new_value );
+}
+
+/**
+ * Handle save/update of screen options for the Groups component admin screen.
+ *
+ * @since 1.7.0
+ * @deprecated 14.0.0
+ *
+ * @param string $value     Will always be false unless another plugin filters it first.
+ * @param string $option    Screen option name.
+ * @param string $new_value Screen option form value.
+ * @return string|int Option value. False to abandon update.
+ */
+function bp_groups_admin_screen_options( $value, $option, $new_value ) {
+	_deprecated_function( __FUNCTION__, '14.0.0', 'bp_admin_set_screen_options' );
+
+	return bp_admin_set_screen_options( $value, $option, $new_value );
+}
diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php
index a70c9b8ca..42754925a 100644
--- src/bp-groups/bp-groups-admin.php
+++ src/bp-groups/bp-groups-admin.php
@@ -18,11 +18,6 @@ if ( ! class_exists( 'WP_List_Table' ) ) {
 	require ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
 }
 
-// The per_page screen option. Has to be hooked in extremely early.
-if ( is_admin() && ! empty( $_REQUEST['page'] ) && 'bp-groups' == $_REQUEST['page'] ) {
-	add_filter( 'set-screen-option', 'bp_groups_admin_screen_options', 10, 3 );
-}
-
 /**
  * Register the Groups component admin screen.
  *
@@ -523,30 +518,6 @@ function bp_groups_admin_load() {
 	}
 }
 
-/**
- * Handle save/update of screen options for the Groups component admin screen.
- *
- * @since 1.7.0
- *
- * @param string $value     Will always be false unless another plugin filters it first.
- * @param string $option    Screen option name.
- * @param string $new_value Screen option form value.
- * @return string|int Option value. False to abandon update.
- */
-function bp_groups_admin_screen_options( $value, $option, $new_value ) {
-	if ( 'toplevel_page_bp_groups_per_page' != $option && 'toplevel_page_bp_groups_network_per_page' != $option ) {
-		return $value;
-	}
-
-	// Per page.
-	$new_value = (int) $new_value;
-	if ( $new_value < 1 || $new_value > 999 ) {
-		return $value;
-	}
-
-	return $new_value;
-}
-
 /**
  * Select the appropriate Groups admin screen, and output it.
  *
