diff --git src/wp-includes/user.php src/wp-includes/user.php
index 1cd2db2..6d89bcb 100644
--- src/wp-includes/user.php
+++ src/wp-includes/user.php
@@ -1270,17 +1270,58 @@ function get_blogs_of_user( $user_id, $all = false ) {
  * @return bool
  */
 function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) {
+	global $wpdb;
+
 	$user_id = (int) $user_id;
 	$blog_id = (int) $blog_id;
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = get_current_user_id();
+	}
+
+	//Technically not needed, but does save calls to get_blog_details and get_user_meta
+	//in the event that the function is called when a user isn't logged in
+	if ( empty( $user_id ) ) {
+		return false;
+	} else {
+		$user = get_userdata( $user_id );
+		if ( ! $user instanceof WP_User ) {
+			return false;
+		}
+	}
 
-	if ( empty( $blog_id ) )
+	if ( ! is_multisite() ) {
+		return true;
+	}
+
+	if ( empty( $blog_id ) ) {
 		$blog_id = get_current_blog_id();
+	}
+
+	$blog = get_blog_details( $blog_id );
 
-	$blogs = get_blogs_of_user( $user_id );
-	return array_key_exists( $blog_id, $blogs );
+	if ( ! $blog || ! isset( $blog->domain ) || $blog->archived || $blog->spam || $blog->deleted ) {
+		return false;
+	}
+
+	$keys = get_user_meta( $user_id );
+	if ( empty( $keys ) ) {
+		return false;
+	}
+
+	//no underscore before capabilities in $base_capabilities_key
+	$base_capabilities_key = $wpdb->base_prefix . 'capabilities';
+	$site_capabilities_key = $wpdb->base_prefix . $blog_id . '_capabilities';
+
+	if ( isset( $keys[ $base_capabilities_key ] ) && $blog_id == 1 ) {
+		return true;
+	}
+
+	if ( isset( $keys[ $site_capabilities_key ] ) ) {
+		return true;
+	}
+
+	return false;
 }
 
 /**
diff --git tests/phpunit/tests/user.php tests/phpunit/tests/user.php
index f63d838..32fe283 100644
--- tests/phpunit/tests/user.php
+++ tests/phpunit/tests/user.php
@@ -366,6 +366,9 @@ class Tests_User extends WP_UnitTestCase {
 	function test_is_user_member_of_blog() {
 		$old_current = get_current_user_id();
 
+		// test for "get current user" when not logged in
+		$this->assertFalse( is_user_member_of_blog() );
+
 		$user_id = $this->factory->user->create( array( 'role' => 'subscriber' ) );
 		wp_set_current_user( $user_id );
 
diff --git tests/phpunit/tests/user/multisite.php tests/phpunit/tests/user/multisite.php
index 41b0e88..59cf898 100644
--- tests/phpunit/tests/user/multisite.php
+++ tests/phpunit/tests/user/multisite.php
@@ -140,6 +140,9 @@ class Tests_Multisite_User extends WP_UnitTestCase {
 	function test_is_user_member_of_blog() {
 		global $wpdb;
 
+		// test for "get current user" when not logged in
+		$this->assertFalse( is_user_member_of_blog() );
+
 		$user1_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
 
 		$old_current = get_current_user_id();
