diff --git a/src/bp-core/bp-core-attachments.php b/src/bp-core/bp-core-attachments.php
index 2663dde..f0ddaa2 100644
--- a/src/bp-core/bp-core-attachments.php
+++ b/src/bp-core/bp-core-attachments.php
@@ -410,6 +410,27 @@ function bp_attachments_get_attachment( $data = 'url', $args = array() ) {
 		'file'       => '',
 	), 'attachments_get_attachment_src' );
 
+	/**
+	 * Filters whether or not to handle fetching a BuddyPress image attachment.
+	 *
+	 * If you want to override this function, make sure you return false.
+	 *
+	 * @since 2.5.1
+	 *
+	 * @param null|string $value If null is returned, proceed with default behaviour. Otherwise, value returned verbatim.
+	 * @param array $r {
+	 *     @type string $object_dir The object dir (eg: members/groups). Defaults to members.
+	 *     @type int    $item_id    The object id (eg: a user or a group id). Defaults to current user.
+	 *     @type string $type       The type of the attachment which is also the subdir where files are saved.
+	 *                              Defaults to 'cover-image'
+	 *     @type string $file       The name of the file.
+	 * }
+	 */
+	$pre_filter = apply_filters( 'bp_attachments_pre_get_attachment', null, $r );
+	if ( $pre_filter !== null ) {
+		return $pre_filter;
+	}
+
 	// Get BuddyPress Attachments Uploads Dir datas.
 	$bp_attachments_uploads_dir = bp_attachments_uploads_dir_get();
 
@@ -478,6 +499,20 @@ function bp_attachments_get_attachment( $data = 'url', $args = array() ) {
 function bp_attachments_delete_file( $args = array() ) {
 	$attachment_path = bp_attachments_get_attachment( 'path', $args );
 
+	/**
+	 * Filters whether or not to handle deleting an existing BuddyPress attachment.
+	 *
+	 * If you want to override this function, make sure you return false.
+	 *
+	 * @since 2.5.1
+	 *
+	 * @param bool $value Whether or not to delete the BuddyPress attachment.
+	 * @param array Array of arguments for the attachment deletion.
+	 */
+	if ( ! apply_filters( 'bp_attachments_pre_delete_file', true, $args ) ) {
+		return true;
+	}
+
 	if ( empty( $attachment_path ) ) {
 		return false;
 	}
@@ -1223,6 +1258,22 @@ function bp_attachments_cover_image_ajax_upload() {
 		bp_attachments_json_response( false, $is_html4 );
 	}
 
+	/**
+	 * Filters whether or not to handle cover image uploading.
+	 *
+	 * If you want to override this function, make sure you return false.
+	 *
+	 * @since 2.5.1
+	 *
+	 * @param bool $value Whether or not to crop.
+	 * @param array $bp_params
+	 * @param array $needs_reset Stores original value of certain globals we need to revert to later.
+	 * @param array $object_data
+	 */
+	if ( ! apply_filters( 'bp_attachments_pre_cover_image_ajax_upload', true, $bp_params, $needs_reset, $object_data ) ) {
+		return true;
+	}
+
 	$cover_image_attachment = new BP_Attachment_Cover_Image();
 	$uploaded = $cover_image_attachment->upload( $_FILES );
 
diff --git a/src/bp-core/bp-core-avatars.php b/src/bp-core/bp-core-avatars.php
index 6529d14..64a9e43 100644
--- a/src/bp-core/bp-core-avatars.php
+++ b/src/bp-core/bp-core-avatars.php
@@ -703,6 +703,31 @@ function bp_core_delete_existing_avatar( $args = '' ) {
 	$args = wp_parse_args( $args, $defaults );
 	extract( $args, EXTR_SKIP );
 
+	/**
+	 * Filters whether or not to handle deleting an existing avatar.
+	 *
+	 * If you want to override this function, make sure you return false.
+	 *
+	 * @since 2.5.1
+	 *
+	 * @param bool $value Whether or not to delete the avatar.
+	 * @param array $args {
+	 *     Array of function parameters.
+	 *
+	 *     @type bool|int    $item_id    ID of the item whose avatar you're deleting.
+	 *                                   Defaults to the current item of type $object.
+	 *     @type string      $object     Object type of the item whose avatar you're
+	 *                                   deleting. 'user', 'group', 'blog', or custom.
+	 *                                   Default: 'user'.
+	 *     @type bool|string $avatar_dir Subdirectory where avatar is located.
+	 *                                   Default: false, which falls back on the default location
+	 *                                   corresponding to the $object.
+	 * }
+	 */
+	if ( ! apply_filters( 'bp_core_pre_delete_existing_avatar', true, $args ) ) {
+		return true;
+	}
+
 	if ( empty( $item_id ) ) {
 		if ( 'user' == $object )
 			$item_id = bp_displayed_user_id();
@@ -1069,6 +1094,21 @@ function bp_avatar_handle_capture( $data = '', $item_id = 0 ) {
 		return false;
 	}
 
+	/**
+	 * Filters whether or not to handle avatar webcam capture.
+	 *
+	 * If you want to override this function, make sure you return false.
+	 *
+	 * @since 2.5.1
+	 *
+	 * @param bool   $value   Whether or not to crop.
+	 * @param string $data    Base64 encoded image.
+	 * @param int    $item_id Item to associate.
+	 */
+	if ( ! apply_filters( 'bp_avatar_pre_handle_capture', true, $data, $item_id ) ) {
+		return true;
+	}
+
 	$avatar_dir = bp_core_avatar_upload_path() . '/avatars';
 
 	// It's not a regular upload, we may need to create this folder.
