diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
index 91c1fa519..137e4ccfd 100644
--- src/bp-activity/bp-activity-functions.php
+++ src/bp-activity/bp-activity-functions.php
@@ -631,6 +631,57 @@ function bp_activity_get_post_types_tracking_args() {
 	return apply_filters( 'bp_activity_get_post_types_tracking_args', $post_types_tracking_args );
 }
 
+/**
+ * Gets the list of activity types name supporting the requested feature.
+ *
+ * This function is still a WIP, please don't use it into your plugins or themes.
+ *
+ * @since 10.0.0
+ *
+ * @access private
+ * @todo `bp_activity_set_action()` should be improved to include a supports
+ * argument or best we should create a `bp_register_activity_type()` function
+ * to mimic the way WordPress registers post types. For now we'll use a non
+ * extendable workaround.
+ *
+ * @param string $feature The feature activity types should support.
+ * @return array          The list of activity types name supporting the requested feature.
+ */
+function _bp_activity_get_types_by_support( $feature = 'generated-content' ) {
+	$activity_types = array();
+
+	if ( 'generated-content' === $feature ) {
+		$activity_types = array( 'new_member', 'new_avatar' );
+
+		if ( bp_is_active( 'friends' ) ) {
+			array_push( $activity_types, 'friendship_created' );
+		}
+
+		if ( bp_is_active( 'groups' ) ) {
+			array_push( $activity_types, 'created_group', 'joined_group' );
+		}
+
+		if ( bp_is_active( 'xprofile' ) ) {
+			array_push( $activity_types, 'updated_profile' );
+		}
+	}
+
+	$filter_key = str_replace( '-', '_', $feature );
+
+	/**
+	 * Use this filter to add/remove activity types supporting the requested feature.
+	 *
+	 * The dynamic portion of the filter is the name of the requested feature where hyphens are
+	 * replaced by underscores. Eg. use `bp_activity_get_types_supporting_generated_content` to
+	 * edit the list of activities supporting the `generated-content` feature.
+	 *
+	 * @since 10.0.0
+	 *
+	 * @param array $activity_types The list of activity types name supporting the requested feature.
+	 */
+	return apply_filters( "bp_activity_get_types_supporting_{$filter_key}", $activity_types );
+}
+
 /**
  * Check if the *Post Type* activity supports a specific feature.
  *
@@ -714,25 +765,7 @@ function bp_activity_type_supports( $activity_type = '', $feature = '' ) {
 		 * Does this activity type support `generated-content`?
 		 */
 		case 'generated-content' :
-			/*
-			 * @todo `bp_activity_set_action()` should be improved to include a supports
-			 * argument or best we should create a `bp_register_activity_type()` function
-			 * to mimic the way WordPress registers post types. For now we'll use a non
-			 * extendable workaround.
-			 */
-			$activity_types = array( 'new_member', 'new_avatar' );
-
-			if ( bp_is_active( 'friends' ) ) {
-				array_push( $activity_types, 'friendship_created' );
-			}
-
-			if ( bp_is_active( 'groups' ) ) {
-				array_push( $activity_types, 'created_group', 'joined_group' );
-			}
-
-			if ( bp_is_active( 'xprofile' ) ) {
-				array_push( $activity_types, 'updated_profile' );
-			}
+			$activity_types = _bp_activity_get_types_by_support( 'generated-content' );
 
 			$retval = in_array( $activity_type, $activity_types, true );
 			break;
diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php
index 52f074202..8165d22ca 100644
--- src/bp-activity/bp-activity-template.php
+++ src/bp-activity/bp-activity-template.php
@@ -1462,21 +1462,38 @@ function bp_activity_has_content() {
 
 			// Set generated content properties.
 			if ( 'new_avatar' === $activity_type ) {
-				$avatars = bp_avatar_get_version( $user_id, 'user', bp_get_activity_date_recorded() );
+				$avatars = array();
 
-				if ( $avatars && 1 === count( $avatars ) ) {
-					$avatar            = reset( $avatars );
-					$historical_avatar = trailingslashit( $avatar->parent_dir_url ) . $avatar->name;
+				// Use the avatar history to display the avatar that was in use at the time the activity was posted.
+				if ( ! bp_avatar_history_is_disabled() ) {
+					$avatars = bp_avatar_get_version( $user_id, 'user', bp_get_activity_date_recorded() );
 
-					// Add historical avatar to the current activity.
+					if ( $avatars && 1 === count( $avatars ) ) {
+						$avatar            = reset( $avatars );
+						$historical_avatar = trailingslashit( $avatar->parent_dir_url ) . $avatar->name;
+
+						// Add historical avatar to the current activity.
+						$generated_content->user_profile_photo = array(
+							'value'             => $historical_avatar,
+							'sanitize_callback' => 'esc_url',
+						);
+					}
+
+					// Otherwise use the current/latest avatar.
+				} else {
 					$generated_content->user_profile_photo = array(
-						'value'             => $historical_avatar,
+						'value'             => bp_core_fetch_avatar(
+							array(
+								'item_id' => $user_id,
+								'object'  => 'user',
+								'type'    => 'full',
+								'width'   => bp_core_avatar_full_width(),
+								'height'  => bp_core_avatar_full_height(),
+								'html'    => false,
+							)
+						),
 						'sanitize_callback' => 'esc_url',
 					);
-
-					// Do not use a generated content.
-				} else {
-					return false;
 				}
 			}
 
diff --git src/bp-core/bp-core-attachments.php src/bp-core/bp-core-attachments.php
index 66e8dd2bb..8a4c1dab2 100644
--- src/bp-core/bp-core-attachments.php
+++ src/bp-core/bp-core-attachments.php
@@ -815,7 +815,8 @@ function bp_attachments_enqueue_scripts( $class = '' ) {
 			),
 		);
 
-		if ( 'user' === $object ) {
+		// Add the recycle view if avatar history is enabled.
+		if ( 'user' === $object && ! bp_avatar_history_is_disabled() ) {
 			// Look inside history to see if the user previously uploaded avatars.
 			$avatars_history = bp_avatar_get_avatars_history( $item_id, $object );
 
diff --git src/bp-core/bp-core-avatars.php src/bp-core/bp-core-avatars.php
index f0abaec6a..8f264f607 100644
--- src/bp-core/bp-core-avatars.php
+++ src/bp-core/bp-core-avatars.php
@@ -2149,6 +2149,26 @@ function bp_avatar_template_check() {
 	}
 }
 
+/**
+ * Informs about whether avatar history is disabled or not.
+ *
+ * @since 10.0.0
+ *
+ * @return bool True if avatar history is disabled. False otherwise.
+ *              Default: `false`.
+ */
+function bp_avatar_history_is_disabled() {
+	/**
+	 * Filter here returning `true` to disable avatar history.
+	 *
+	 * @since 10.0.0
+	 *
+	 * @param bool $value True to disable avatar history. False otherwise.
+	 *                    Default: `false`.
+	 */
+	return apply_filters( 'bp_disable_avatar_history', false );
+}
+
 /**
  * Get a specific version of an avatar from its history.
  *
diff --git src/bp-core/classes/class-bp-attachment-avatar.php src/bp-core/classes/class-bp-attachment-avatar.php
index 2887f33e2..21bfedd94 100644
--- src/bp-core/classes/class-bp-attachment-avatar.php
+++ src/bp-core/classes/class-bp-attachment-avatar.php
@@ -246,41 +246,54 @@ class BP_Attachment_Avatar extends BP_Attachment {
 			return false;
 		}
 
-		// Delete the existing avatar files for the object.
-		$existing_avatar = bp_core_fetch_avatar( array(
-			'object'  => $args['object'],
-			'item_id' => $args['item_id'],
-			'html' => false,
-		) );
+		// Get the existing avatar files for the object.
+		$existing_avatar = bp_core_fetch_avatar(
+			array(
+				'object'  => $args['object'],
+				'item_id' => $args['item_id'],
+				'html'    => false,
+			)
+		);
 
 		/**
 		 * Check that the new avatar doesn't have the same name as the
 		 * old one before moving the previous one into history.
 		 */
 		if ( ! empty( $existing_avatar ) && $existing_avatar !== $this->url . $relative_path ) {
-			// Add a new revision for the existing avatar.
-			$avatars = bp_attachments_list_directory_files( $avatar_folder_dir );
-
-			if ( $avatars ) {
-				foreach ( $avatars as $avatar_file ) {
-					if ( ! isset( $avatar_file->name, $avatar_file->id, $avatar_file->path ) ) {
-						continue;
-					}
-
-					$is_full  = preg_match( "/-bpfull/", $avatar_file->name );
-					$is_thumb = preg_match( "/-bpthumb/", $avatar_file->name );
+			// Avatar history is disabled, simply delete the existing avatar files.
+			if ( bp_avatar_history_is_disabled() ) {
+				bp_core_delete_existing_avatar(
+					array(
+						'object'      => $args['object'],
+						'item_id'     => $args['item_id'],
+						'avatar_path' => $avatar_folder_dir,
+					)
+				);
+			} else {
+				// Add a new revision for the existing avatar.
+				$avatars = bp_attachments_list_directory_files( $avatar_folder_dir );
 
-					if ( $is_full || $is_thumb ) {
-						$revision = $this->add_revision(
-							'avatar',
-							array(
-								'file_abspath' => $avatar_file->path,
-								'file_id'      => $avatar_file->id,
-							)
-						);
+				if ( $avatars ) {
+					foreach ( $avatars as $avatar_file ) {
+						if ( ! isset( $avatar_file->name, $avatar_file->id, $avatar_file->path ) ) {
+							continue;
+						}
 
-						if ( is_wp_error( $revision ) ) {
-							error_log( $revision->get_error_message() );
+						$is_full  = preg_match( "/-bpfull/", $avatar_file->name );
+						$is_thumb = preg_match( "/-bpthumb/", $avatar_file->name );
+
+						if ( $is_full || $is_thumb ) {
+							$revision = $this->add_revision(
+								'avatar',
+								array(
+									'file_abspath' => $avatar_file->path,
+									'file_id'      => $avatar_file->id,
+								)
+							);
+
+							if ( is_wp_error( $revision ) ) {
+								error_log( $revision->get_error_message() );
+							}
 						}
 					}
 				}
