Index: bp-core/bp-core-templatetags.php
===================================================================
--- bp-core/bp-core-templatetags.php	(revision 3216)
+++ bp-core/bp-core-templatetags.php	(working copy)
@@ -311,7 +311,7 @@
 			'height' => false,
 			'class' => 'avatar',
 			'id' => false,
-			'alt' => __( 'Member avatar', 'buddypress' )
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
@@ -686,13 +686,14 @@
 			'type'		=> 'thumb',
 			'width'		=> false,
 			'height'	=> false,
-			'html'		=> true
+			'html'		=> true,
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_loggedin_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->loggedin_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html ) ) );
+		return apply_filters( 'bp_get_loggedin_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->loggedin_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
 	}
 
 function bp_displayed_user_avatar( $args = '' ) {
@@ -705,13 +706,14 @@
 			'type'		=> 'thumb',
 			'width'		=> false,
 			'height'	=> false,
-			'html'		=> true
+			'html'		=> true,
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_displayed_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->displayed_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html ) ) );
+		return apply_filters( 'bp_get_displayed_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->displayed_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
 	}
 
 function bp_avatar_admin_step() {
Index: bp-core/bp-core-avatars.php
===================================================================
--- bp-core/bp-core-avatars.php	(revision 3216)
+++ bp-core/bp-core-avatars.php	(working copy)
@@ -58,7 +58,7 @@
  * @return string Formatted HTML <img> element, or raw avatar URL based on $html arg
  */
 function bp_core_fetch_avatar( $args = '' ) {
-	global $bp, $current_blog;
+	global $bp, $current_blog, $members_template, $forum_template;
 
 	// Set a few default variables
 	$def_object		= 'user';
@@ -80,6 +80,7 @@
 		'email'			=> false,		// Pass the user email (for gravatar) to prevent querying the DB for it
 		'no_grav'		=> false,		// If there is no avatar found, return false instead of a grav?
 		'html'			=> true			// Wrap the return img URL in <img />
+		'title'			=> ''			// Custom <img> title (string)
 	);
 
 	// Compare defaults to passed and extract
@@ -117,6 +118,31 @@
 	// Add an identifying class to each item
 	$class .= ' ' . $object . '-' . $item_id . '-avatar';
 
+	// Set alt tag
+	$item_name = '';
+
+	if ( 'user' == $object ) {
+		if ( $members_template )
+			$item_name = bp_get_member_name();
+		else
+			$item_name = bp_core_get_user_displayname( $item_id );
+	} elseif ( 'group' == $object ) {
+		if ( $forum_template ) {
+			$group = new BP_Groups_Group( $item_id );
+			$item_name = bp_get_group_name( $group );
+		}
+		else
+			$item_name = bp_get_group_name();
+	}
+
+	$alt = sprintf( $alt, apply_filters( 'bp_core_avatar_alt', $item_name, $item_id, $object ) );
+
+	// Set title tag
+	if ( $title )
+		$title = " title='" . apply_filters( 'bp_core_avatar_title', $title, $item_id, $object ) . "'";
+	elseif ( $item_name )
+		$title = " title='" . apply_filters( 'bp_core_avatar_title', $item_name, $item_id, $object ) . "'";
+
 	// Set CSS ID if passed
 	if ( !empty( $css_id ) )
 		$css_id = " id='{$css_id}'";
@@ -195,7 +221,7 @@
 
 			// Return it wrapped in an <img> element
 			if ( true === $html ) {
-				return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $avatar_url . '" alt="' . $alt . '" class="' . $class . '"' . $css_id . $html_width . $html_height . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
+				return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $avatar_url . '" alt="' . $alt . '" class="' . $class . '"' . $css_id . $html_width . $html_height . $title . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
 
 			// ...or only the URL
 			} else {
@@ -246,7 +272,7 @@
 
 		// Return gravatar wrapped in <img />
 		if ( true === $html )
-			return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $gravatar . '" alt="' . $alt . '" class="' . $class . '"' . $css_id . $html_width . $html_height . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
+			return apply_filters( 'bp_core_fetch_avatar', '<img src="' . $gravatar . '" alt="' . $alt . '" class="' . $class . '"' . $css_id . $html_width . $html_height . $title . ' />', $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir );
 
 		// ...or only return the gravatar URL
 		else
 
Index: bp-blogs/bp-blogs-templatetags.php
===================================================================
--- bp-blogs/bp-blogs-templatetags.php	(revision 3216)
+++ bp-blogs/bp-blogs-templatetags.php	(working copy)
@@ -192,7 +192,7 @@
 			'height' => false,
 			'class' => 'avatar',
 			'id' => false,
-			'alt' => __( 'Blog avatar', 'buddypress' ),
+			'alt' => __( 'Blog authored by %s', 'buddypress' ),
 			'no_grav' => true
 		);
 
Index: bp-groups/bp-groups-templatetags.php
===================================================================
--- bp-groups/bp-groups-templatetags.php	(revision 3216)
+++ bp-groups/bp-groups-templatetags.php	(working copy)
@@ -279,7 +279,7 @@
 			'height' => false,
 			'class' => 'avatar',
 			'id' => false,
-			'alt' => __( 'Group avatar', 'buddypress' )
+			'alt' => __( 'Avatar for %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );

Index: bp-forums/bp-forum-templatetags.php
===================================================================
--- bp-forums/bp-forums-templatetags.php	(revision 3216)
+++ bp-forums/bp-forums-templatetags.php	(working copy)
@@ -278,12 +278,13 @@
 			'type' => 'thumb',
 			'width' => false,
 			'height' => false,
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_the_topic_poster_avatar', bp_core_fetch_avatar( array( 'item_id' => $forum_template->topic->topic_poster, 'type' => $type, 'width' => $width, 'height' => $height ) ) );
+		return apply_filters( 'bp_get_the_topic_poster_avatar', bp_core_fetch_avatar( array( 'item_id' => $forum_template->topic->topic_poster, 'type' => $type, 'width' => $width, 'height' => $height, 'alt' => $alt ) ) );
 	}
 
 function bp_the_topic_poster_name() {
@@ -359,12 +360,13 @@
 			'type' => 'thumb',
 			'width' => false,
 			'height' => false,
+			'alt' => __( 'Avatar for %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_the_topic_object_avatar', bp_core_fetch_avatar( array( 'item_id' => $forum_template->topic->object_id, 'type' => $type, 'object' => 'group', 'width' => $width, 'height' => $height ) ) );
+		return apply_filters( 'bp_get_the_topic_object_avatar', bp_core_fetch_avatar( array( 'item_id' => $forum_template->topic->object_id, 'type' => $type, 'object' => 'group', 'width' => $width, 'height' => $height, 'alt' => $alt ) ) );
 	}
 
 function bp_the_topic_last_poster_avatar( $args = '' ) {
@@ -377,12 +379,13 @@
 			'type' => 'thumb',
 			'width' => false,
 			'height' => false,
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_the_topic_last_poster_avatar', bp_core_fetch_avatar( array( 'email' => $forum_template->topic->topic_last_poster_email, 'item_id' => $forum_template->topic->topic_last_poster, 'type' => $type, 'width' => $width, 'height' => $height ) ) );
+		return apply_filters( 'bp_get_the_topic_last_poster_avatar', bp_core_fetch_avatar( array( 'email' => $forum_template->topic->topic_last_poster_email, 'item_id' => $forum_template->topic->topic_last_poster, 'type' => $type, 'width' => $width, 'height' => $height, 'alt' => $alt ) ) );
 	}
 
 function bp_the_topic_start_time() {
@@ -892,12 +895,13 @@
 			'type' => 'thumb',
 			'width' => 20,
 			'height' => 20,
+			'alt' => __( 'Picture of %s', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r, EXTR_SKIP );
 
-		return apply_filters( 'bp_get_the_topic_post_poster_avatar', bp_core_fetch_avatar( array( 'item_id' => $topic_template->post->poster_id, 'type' => $type, 'width' => $width, 'height' => $height ) ) );
+		return apply_filters( 'bp_get_the_topic_post_poster_avatar', bp_core_fetch_avatar( array( 'item_id' => $topic_template->post->poster_id, 'type' => $type, 'width' => $width, 'height' => $height, 'alt' => $alt ) ) );
 	}
 
 function bp_the_topic_post_poster_name() {
