Index: wp-includes/admin-bar.php
===================================================================
--- wp-includes/admin-bar.php	(revision 19170)
+++ wp-includes/admin-bar.php	(working copy)
@@ -228,35 +228,36 @@
 	if ( $title != $blogname )
 		$title = trim( $title ) . '&hellip;';
 
+	$member_of_site = is_super_admin() || is_user_member_of_blog( get_current_user_id(), get_current_blog_id() );
+
 	$wp_admin_bar->add_menu( array(
 		'id'    => 'site-name',
 		'title' => $title,
-		'href'  => is_admin() ? home_url() : admin_url(),
+		'href'  => ( ! $member_of_site || is_admin() ) ? home_url() : admin_url(),
 	) );
 
-	// Create submenu items.
+	// Create submenu items if the current user is a member of the site.
+	if ( $member_of_site ) {
+		if ( is_admin() ) {
+			// Add an option to visit the site.
+			$wp_admin_bar->add_menu( array(
+				'parent' => 'site-name',
+				'id'     => 'view-site',
+				'title'  => __( 'Visit Site' ),
+				'href'   => home_url(),
+			) );
+		} else {
+			// Add the dashboard item.
+			$wp_admin_bar->add_menu( array(
+				'parent' => 'site-name',
+				'id'     => 'dashboard',
+				'title'  => __( 'Dashboard' ),
+				'href'   => admin_url(),
+			) );
 
-	if ( is_admin() ) {
-		// Add an option to visit the site.
-		$wp_admin_bar->add_menu( array(
-			'parent' => 'site-name',
-			'id'     => 'view-site',
-			'title'  => __( 'Visit Site' ),
-			'href'   => home_url(),
-		) );
-
-	// We're on the front end, print a copy of the admin menu.
-	} else {
-		// Add the dashboard item.
-		$wp_admin_bar->add_menu( array(
-			'parent' => 'site-name',
-			'id'     => 'dashboard',
-			'title'  => __( 'Dashboard' ),
-			'href'   => admin_url(),
-		) );
-
-		// Add the appearance submenu items.
-		wp_admin_bar_appearance_menu( $wp_admin_bar );
+			// Add the appearance submenu items.
+			wp_admin_bar_appearance_menu( $wp_admin_bar );
+		}
 	}
 }
 
@@ -272,8 +273,8 @@
 	if ( ! is_user_logged_in() || ! is_multisite() )
 		return;
 
-	// Show only when there are more than two items in the menu.
-	if ( count( $wp_admin_bar->user->blogs ) <= 1 && ! is_super_admin() )
+	// Show when the user has at least 1 site, or they're a super admin.
+	if ( count( $wp_admin_bar->user->blogs ) < 1 && ! is_super_admin() )
 		return;
 
 	$wp_admin_bar->add_menu( array(
@@ -331,11 +332,6 @@
 	$blue_wp_logo_url = includes_url('images/wpmini-blue.png');
 
 	foreach ( (array) $wp_admin_bar->user->blogs as $blog ) {
-		// Skip the current blog (unless we're in the network/user admin).
-		if ( $blog->userblog_id == get_current_blog_id() && ! is_network_admin() && ! is_user_admin() ) {
-			continue;
-		}
-
 		// @todo Replace with some favicon lookup.
 		//$blavatar = '<img src="' . esc_url( blavatar_url( blavatar_domain( $blog->siteurl ), 'img', 16, $blue_wp_logo_url ) ) . '" alt="Blavatar" width="16" height="16" />';
 		$blavatar = '<img src="' . esc_url($blue_wp_logo_url) . '" alt="' . esc_attr__( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>';
