Index: src/bp-core/bp-core-avatars.php
===================================================================
--- src/bp-core/bp-core-avatars.php
+++ src/bp-core/bp-core-avatars.php
@@ -1361,104 +1361,49 @@
 add_action( 'wp_ajax_bp_avatar_set', 'bp_avatar_ajax_set' );
 
 /**
- * Replace default WordPress avatars with BP avatars, if available.
+ * Filter {@link get_avatar_url()} to use the BuddyPress user avatar URL.
  *
- * See 'get_avatar' filter description in wp-includes/pluggable.php.
+ * @since 2.9.0
  *
- * @since 1.1.0
- * @since 2.4.0 Added $args parameter to coincide with WordPress 4.2.0.
- *
- * @param string            $avatar  The avatar path passed to 'get_avatar'.
- * @param int|string|object $user    A user ID, email address, or comment object.
- * @param int               $size    Size of the avatar image ('thumb' or 'full').
- * @param string            $default URL to a default image to use if no avatar is available.
- * @param string            $alt     Alternate text to use in image tag. Default: ''.
- * @param array             $args    Arguments passed to get_avatar_data(), after processing.
- * @return string BP avatar path, if found; else the original avatar path.
+ * @param  string $retval      The URL of the avatar.
+ * @param  mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
+ *                             user email, WP_User object, WP_Post object, or WP_Comment object.
+ * @param  array  $args        Arguments passed to get_avatar_data(), after processing.
+ * @return string
  */
-function bp_core_fetch_avatar_filter( $avatar, $user, $size, $default, $alt = '', $args = array() ) {
-	global $pagenow;
-
-	// Don't filter if inside WordPress options page and force_default is true.
-	if ( 'options-discussion.php' === $pagenow && true === $args['force_default'] ) {
-		return $avatar;
-	}
-
-	// If passed an object, assume $user->user_id.
-	if ( is_object( $user ) ) {
-		if ( isset( $user->user_id ) ) {
-			$id = $user->user_id;
-		} else {
-			$id = $user->ID;
-		}
-
-	// If passed a number, assume it was a $user_id.
-	} elseif ( is_numeric( $user ) ) {
-		$id = $user;
-
-	// If passed a string and that string returns a user, get the $id.
-	} elseif ( is_string( $user ) && ( $user_by_email = get_user_by( 'email', $user ) ) ) {
-		$id = $user_by_email->ID;
-	}
-
-	// If somehow $id hasn't been assigned, return the result of get_avatar.
-	if ( empty( $id ) ) {
-		return !empty( $avatar ) ? $avatar : $default;
-	}
-
-	// Image alt tag.
-	if ( empty( $alt ) ) {
-		$alt = sprintf( __( 'Profile photo of %s', 'buddypress' ), bp_core_get_user_displayname( $id ) );
-	}
-
-	// Use the 'thumb' type, unless the requested width is bigger than
-	// BP's thumb width.
-	$type = 'thumb';
-	if ( (int) $size > bp_core_avatar_thumb_width() ) {
-		$type = 'full';
+function bp_core_get_avatar_data_url_filter( $retval, $id_or_email, $args ) {
+	$user = null;
+
+	// Ugh, hate duplicating code; process the user identifier.
+	if ( is_numeric( $id_or_email ) ) {
+		$user = get_user_by( 'id', absint( $id_or_email ) );
+	} elseif ( $id_or_email instanceof WP_User ) {
+		// User Object
+		$user = $id_or_email;
+	} elseif ( $id_or_email instanceof WP_Post ) {
+		// Post Object
+		$user = get_user_by( 'id', (int) $id_or_email->post_author );
+	} elseif ( $id_or_email instanceof WP_Comment && ! empty( $id_or_email->user_id ) ) {
+		$user = get_user_by( 'id', (int) $id_or_email->user_id );
+	}
+
+	// No user, so bail.
+	if ( null === $user ) {
+		return $retval;
 	}
 
-	$avatar_args = array(
-		'item_id' => $id,
-		'type'    => $type,
-		'width'   => $size,
-		'height'  => $size,
-		'alt'     => $alt,
-	);
+	// Set BuddyPress-specific avatar args.
+	$args['item_id'] = $user->ID;
+	$args['html']    = false;
 
-	// Support new arguments as of WordPress 4.2.0.
-	if ( ! empty( $args['width'] ) ) {
-		$avatar_args['width'] = $args['width'];
-	}
-	if ( ! empty( $args['height'] ) ) {
-		$avatar_args['height'] = $args['height'];
-	}
-	if ( ! empty( $args['class'] ) ) {
-		$avatar_args['class'] = $args['class'];
-	}
-	if ( ! empty( $args['class'] ) ) {
-		$avatar_args['class'] = $args['class'];
+	// Get the BuddyPress avatar URL.
+	if ( $bp_avatar = bp_core_fetch_avatar( $args ) ) {
+		return $bp_avatar;
 	}
-	if ( ! empty( $args['extra_attr'] ) ) {
-		$avatar_args['extra_attr'] = $args['extra_attr'];
-	}
-	if ( ! empty( $args['scheme'] ) ) {
-		$avatar_args['scheme'] = $args['scheme'];
-	}
-	if ( ! empty( $args['force_default'] ) ) {
-		$avatar_args['force_default'] = $args['force_default'];
-	}
-	if ( ! empty( $args['rating'] ) ) {
-		$avatar_args['rating'] = $args['rating'];
-	}
-
-	// Let BuddyPress handle the fetching of the avatar.
-	$bp_avatar = bp_core_fetch_avatar( $avatar_args );
 
-	// If BuddyPress found an avatar, use it. If not, use the result of get_avatar.
-	return ( !$bp_avatar ) ? $avatar : $bp_avatar;
+	return $retval;
 }
-add_filter( 'get_avatar', 'bp_core_fetch_avatar_filter', 10, 6 );
+add_filter( 'get_avatar_url', 'bp_core_get_avatar_data_url_filter', 10, 3 );
 
 /**
  * Is the current avatar upload error-free?
Index: src/bp-core/deprecated/2.9.php
new file mode 100644
===================================================================
--- /dev/null
+++ src/bp-core/deprecated/2.9.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Deprecated functions.
+ *
+ * @deprecated 2.9.0
+ */
+
+// Exit if accessed directly.
+defined( 'ABSPATH' ) || exit;
+
+/**
+ * Replace default WordPress avatars with BP avatars, if available.
+ *
+ * See 'get_avatar' filter description in wp-includes/pluggable.php.
+ *
+ * @since 1.1.0
+ * @since 2.4.0 Added $args parameter to coincide with WordPress 4.2.0.
+ *
+ * @param string            $avatar  The avatar path passed to 'get_avatar'.
+ * @param int|string|object $user    A user ID, email address, or comment object.
+ * @param int               $size    Size of the avatar image ('thumb' or 'full').
+ * @param string            $default URL to a default image to use if no avatar is available.
+ * @param string            $alt     Alternate text to use in image tag. Default: ''.
+ * @param array             $args    Arguments passed to get_avatar_data(), after processing.
+ * @return string BP avatar path, if found; else the original avatar path.
+ */
+function bp_core_fetch_avatar_filter( $avatar, $user, $size, $default, $alt = '', $args = array() ) {
+	_deprecated_function( __FUNCTION__, '2.9' );
+	return $avatar;
+}
\ No newline at end of file
