diff --git src/bp-blogs/bp-blogs-functions.php src/bp-blogs/bp-blogs-functions.php
index 025ed79..a885a17 100644
--- src/bp-blogs/bp-blogs-functions.php
+++ src/bp-blogs/bp-blogs-functions.php
@@ -1477,3 +1477,114 @@ function bp_blogs_restore_data( $user_id = 0 ) {
 	}
 }
 add_action( 'bp_make_ham_user', 'bp_blogs_restore_data', 10, 1 );
+
+/**
+ * Generate the avatar upload directory path for a given blog.
+ *
+ * @since BuddyPress (2.4.0)
+ *
+ * @param int $blog_id Optional. ID of the blog. Default: ID of the
+ *        current blog.
+ * @return string
+ */
+function blogs_avatar_upload_dir( $blog_id = 0 ) {
+
+	if ( empty( $blog_id ) ) {
+		$blog_id = get_current_blog_id();
+	}
+
+	$directory = 'blog-avatars';
+	$path      = bp_core_avatar_upload_path() . '/' . $directory . '/' . $blog_id;
+	$newbdir   = $path;
+	$newurl    = bp_core_avatar_url() . '/' . $directory . '/' . $blog_id;
+	$newburl   = $newurl;
+	$newsubdir = '/' . $directory . '/' . $blog_id;
+
+	/**
+	 * Filters the avatar upload directory path for a given blog.
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param array $value Array of parts related to the blog avatar upload directory.
+	 */
+	return apply_filters( 'blogs_avatar_upload_dir', array(
+		'path'    => $path,
+		'url'     => $newurl,
+		'subdir'  => $newsubdir,
+		'basedir' => $newbdir,
+		'baseurl' => $newburl,
+		'error'   => false
+	) );
+}
+
+/**
+ * Update the blog's profile photo if the site icon was updated
+ *
+ * @since BuddyPress (2.4.0)
+ *
+ * @param string $option name of the option. Passed by do_action() but
+ *        unused here.
+ * @param string $value Value to save meta to.
+ */
+function bp_blogs_use_site_icon_as_avatar( $option = 'site_icon', $value = 0 ) {
+	/**
+	 * Filter here to disable blog's avatar / site icon synchronization
+	 *
+	 * @since BuddyPress (2.4.0)
+	 *
+	 * @param bool True to use the site icon as the blog's profile photo.
+	 *             False otherwise
+	 */
+	if ( ! is_multisite() || false === (bool) apply_filters( 'bp_blogs_use_site_icon_as_avatar', true ) ) {
+		return;
+	}
+
+	$site_icon_id   = (int) $value;
+	$site_icon_data = wp_get_attachment_metadata( $site_icon_id );
+
+	if ( empty( $site_icon_data['file'] ) ) {
+		return false;
+	}
+
+	// Get the blog's upload dir
+	$upload_dir = wp_upload_dir();
+	$blog_id    = get_current_blog_id();
+
+	// Create a profile photo for the blog
+	if ( bp_avatar_create_item_avatar( array(
+		'item_id'   => $blog_id,
+		'object'    => 'blog',
+		'component' => buddypress()->blogs->id,
+		'image'     => trailingslashit( $upload_dir['basedir'] ) . $site_icon_data['file'],
+		'crop_w'    => $site_icon_data['width'],
+		'crop_h'    => $site_icon_data['height'],
+	) ) ) {
+		//The blog's profile photo is synchronized with the site icon
+		bp_blogs_update_blogmeta( $blog_id, 'blog_avatar_type', 'site_icon' );
+	}
+}
+add_action( 'add_option_site_icon', 'bp_blogs_use_site_icon_as_avatar', 10, 2 );
+
+/**
+ * Delete the blog's profile photo if the site icon was deleted
+ * and if the site icon was used as the blog's profile photo
+ *
+ * @since BuddyPress (2.4.0)
+ */
+function bp_blogs_delete_blog_profile_photo() {
+	if ( ! is_multisite() ) {
+		return;
+	}
+
+	$blog_id = get_current_blog_id();
+
+	// Only delete the blog's avatar if synced with site icon
+	if ( 'site_icon' === bp_blogs_get_blogmeta( $blog_id, 'blog_avatar_type' ) ) {
+		// Remove the blog's profile photo
+		bp_core_delete_existing_avatar( array( 'item_id' => $blog_id, 'object' => 'blog' ) );
+
+		// Reset the blog avatar type
+		bp_blogs_delete_blogmeta( $blog_id, 'blog_avatar_type' );
+	}
+}
+add_action( 'delete_option_site_icon', 'bp_blogs_delete_blog_profile_photo' );
diff --git src/bp-blogs/bp-blogs-template.php src/bp-blogs/bp-blogs-template.php
index dd629d1..a13aebf 100644
--- src/bp-blogs/bp-blogs-template.php
+++ src/bp-blogs/bp-blogs-template.php
@@ -566,12 +566,26 @@ function bp_blog_avatar( $args = '' ) {
 			'no_grav' => true,
 		) );
 
+		// Defaults to the admin avatar
+		$item_id    = $blogs_template->blog->admin_user_id;
+		$object     = 'user';
+		$avatar_dir = 'avatars';
+
+		if ( function_exists( 'has_site_icon' ) ) {
+			$object     = 'blog';
+			$avatar_dir = 'blog-avatars';
+			$item_id    = $blogs_template->blog->blog_id;
+			$r['title'] = sprintf( __( 'Site logo of %s', 'buddypress' ), esc_attr( $blogs_template->blog->name ) );
+			$r['class'] = 'avatar blog-' . $blogs_template->blog->blog_id . '-avatar';
+			$r['alt']   = sprintf( __( 'Site logo of %s', 'buddypress' ), esc_attr( $blogs_template->blog->name ) );
+		}
+
 		// Fetch the avatar
 		$avatar = bp_core_fetch_avatar( array(
 			'item_id'    => $blogs_template->blog->admin_user_id,
 			'title'      => $r['title'],
-			//'avatar_dir' => 'blog-avatars',
-			//'object'     => 'blog',
+			'avatar_dir' => $avatar_dir,
+			'object'     => $object,
 			'type'       => $r['type'],
 			'alt'        => $r['alt'],
 			'css_id'     => $r['id'],
diff --git src/bp-core/bp-core-avatars.php src/bp-core/bp-core-avatars.php
index bef7735..7f5a801 100644
--- src/bp-core/bp-core-avatars.php
+++ src/bp-core/bp-core-avatars.php
@@ -1236,6 +1236,89 @@ function bp_avatar_ajax_set() {
 add_action( 'wp_ajax_bp_avatar_set', 'bp_avatar_ajax_set' );
 
 /**
+ * Use the absolute path to an image to set an object's avatar
+ *
+ * @since BuddyPress (?)
+ *
+ * @param  array  $args {
+ *     @type int    $item_id   The ID of the object
+ *     @type string $object    The object type (eg: group, user, blog)
+ *     @type string $component The component for the object (eg: groups, xprofile, blogs)
+ *     @type string $image     The absolute path to the image
+ *     @type int    $crop_w    Crop width. Default: the global 'full' avatar width,
+ *                             as retrieved by bp_core_avatar_full_width().
+ *     @type int    $crop_h    Crop height. Default: the global 'full' avatar height,
+ *                             as retrieved by bp_core_avatar_full_height().
+ *     @type int    $crop_x    The horizontal starting point of the crop. Default: 0.
+ *     @type int    $crop_y    The vertical starting point of the crop. Default: 0.
+ * }
+ * @return bool  true on success, false otherwise
+ */
+function bp_avatar_create_item_avatar( $args = array() ) {
+	$r = bp_parse_args( $args, array(
+		'item_id'   => 0,
+		'object'    => 'user',
+		'component' => 'xprofile',
+		'image'     => '',
+		'crop_w'    => bp_core_avatar_full_width(),
+		'crop_h'    => bp_core_avatar_full_height(),
+		'crop_x'    => 0,
+		'crop_y'    => 0
+	), 'create_item_avatar' );
+
+	if ( empty( $r['item_id'] ) || ! file_exists( $r['image'] ) || ! @getimagesize( $r['image'] ) ) {
+		return false;
+	}
+
+	if ( is_callable( $r['component'] . '_avatar_upload_dir' ) ) {
+		$dir_args = array( $r['item_id'] );
+
+		// In case  of xprofile, we need an extra argument
+		if ( 'xprofile' === $r['component'] ) {
+			$dir_args = array( false, $r['item_id'] );
+		}
+
+		$avatar_data = call_user_func_array( $r['component'] . '_avatar_upload_dir', $dir_args );
+	}
+
+	if ( ! isset( $avatar_data['path'] ) || ! isset( $avatar_data['subdir'] ) ) {
+		return false;
+	}
+
+	// It's not a regular upload, we may need to create this folder
+	if( ! is_dir( $avatar_data['path'] ) ) {
+		if ( ! wp_mkdir_p( $avatar_data['path'] ) ) {
+			return false;
+		}
+	}
+
+	$image_file_name = wp_unique_filename( $avatar_data['path'], basename( $r['image'] ) );
+
+	// Copy the image file into the avatar dir
+	copy( $r['image'], $avatar_data['path'] . '/' . $image_file_name );
+
+	// Check the original file is copied
+	if ( ! file_exists( $avatar_data['path'] . '/' . $image_file_name ) ) {
+		return false;
+	}
+
+	if ( ! bp_core_avatar_handle_crop( array(
+		'object'        => $r['object'],
+		'avatar_dir'    => trim( dirname( $avatar_data['subdir'] ), '/' ),
+		'item_id'       => (int) $r['item_id'],
+		'original_file' => trailingslashit( $avatar_data['subdir'] ) . $image_file_name,
+		'crop_w'        => $r['crop_w'],
+		'crop_h'        => $r['crop_h'],
+		'crop_x'        => $r['crop_x'],
+		'crop_y'        => $r['crop_y']
+	) ) ) {
+		return false;
+	} else {
+		return true;
+	}
+}
+
+/**
  * Replace default WordPress avatars with BP avatars, if available.
  *
  * Filters 'get_avatar'.
