Index: src/bp-groups/bp-groups-cache.php
===================================================================
--- src/bp-groups/bp-groups-cache.php
+++ src/bp-groups/bp-groups-cache.php
@@ -251,6 +251,7 @@
 }
 add_action( 'bp_groups_member_before_delete', 'bp_groups_clear_user_group_cache_on_other_events', 10, 2 );
 add_action( 'bp_groups_member_before_delete_invite', 'bp_groups_clear_user_group_cache_on_other_events', 10, 2 );
+add_action( 'groups_accept_invite', 'bp_groups_clear_user_group_cache_on_other_events', 10, 2 );
 
 /* List actions to clear super cached pages on, if super cache is installed */
 add_action( 'groups_join_group',                 'bp_core_clear_cache' );
Index: src/bp-groups/bp-groups-functions.php
===================================================================
--- src/bp-groups/bp-groups-functions.php
+++ src/bp-groups/bp-groups-functions.php
@@ -1541,10 +1541,29 @@
  * @param int    $group_id ID of potential group.
  * @param string $type     Optional. Use 'sent' to check for sent invites,
  *                         'all' to check for all. Default: 'sent'.
- * @return bool True if an invitation is found, otherwise false.
+ * @return int|bool ID of the membership if found, otherwise false.
  */
 function groups_check_user_has_invite( $user_id, $group_id, $type = 'sent' ) {
-	return BP_Groups_Member::check_has_invite( $user_id, $group_id, $type );
+	$invite = false;
+
+	$args = array(
+		'is_confirmed' => false,
+		'is_banned'    => null,
+		'is_admin'     => null,
+		'is_mod'       => null,
+	);
+
+	if ( 'sent' === $type ) {
+		$args['invite_sent'] = true;
+	}
+
+	$user_groups = bp_get_user_groups( $user_id, $args );
+
+	if ( isset( $user_groups[ $group_id ] ) && 0 !== $user_groups[ $group_id ]->inviter_id ) {
+		$invite = $user_groups[ $group_id ]->id;
+	}
+
+	return $invite;
 }
 
 /**
@@ -1889,10 +1908,23 @@
  *
  * @param int $user_id  ID of the user.
  * @param int $group_id ID of the group.
- * @return int|null ID of the membership if found, otherwise false.
+ * @return int|bool ID of the membership if found, otherwise false.
  */
 function groups_check_for_membership_request( $user_id, $group_id ) {
-	return BP_Groups_Member::check_for_membership_request( $user_id, $group_id );
+	$request = false;
+
+	$user_groups = bp_get_user_groups( $user_id, array(
+		'is_confirmed' => false,
+		'is_banned'    => false,
+		'is_admin'     => null,
+		'is_mod'       => null
+	) );
+
+	if ( isset( $user_groups[ $group_id ] ) && 0 === $user_groups[ $group_id ]->inviter_id ) {
+		$request = $user_groups[ $group_id ]->id;
+	}
+
+	return $request;
 }
 
 /**
Index: src/bp-groups/classes/class-bp-groups-member.php
===================================================================
--- src/bp-groups/classes/class-bp-groups-member.php
+++ src/bp-groups/classes/class-bp-groups-member.php
@@ -786,21 +786,14 @@
 	 * @param int    $group_id ID of the group.
 	 * @param string $type     If 'sent', results are limited to those invitations
 	 *                         that have actually been sent (non-draft). Default: 'sent'.
-	 * @return int|null The ID of the invitation if found, otherwise null.
+	 * @return int
 	 */
 	public static function check_has_invite( $user_id, $group_id, $type = 'sent' ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp  = buddypress();
-		$sql = "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND inviter_id != 0";
-
-		if ( 'sent' == $type )
-			$sql .= " AND invite_sent = 1";
-
-		return $wpdb->get_var( $wpdb->prepare( $sql, $user_id, $group_id ) );
+		return (int) groups_check_user_has_invite( $user_id, $group_id, $type );
 	}
 
 	/**
@@ -871,17 +864,14 @@
 	 *
 	 * @param int $user_id  ID of the user.
 	 * @param int $group_id ID of the group.
-	 * @return mixed
+	 * @return int
 	 */
 	public static function check_is_admin( $user_id, $group_id ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp = buddypress();
-
-		return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_admin = 1 AND is_banned = 0", $user_id, $group_id ) );
+		return (int) groups_is_user_admin( $user_id, $group_id );
 	}
 
 	/**
@@ -891,17 +881,14 @@
 	 *
 	 * @param int $user_id  ID of the user.
 	 * @param int $group_id ID of the group.
-	 * @return mixed
+	 * @return int
 	 */
 	public static function check_is_mod( $user_id, $group_id ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp = buddypress();
-
-		return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_mod = 1 AND is_banned = 0", $user_id, $group_id ) );
+		return (int) groups_is_user_mod( $user_id, $group_id );
 	}
 
 	/**
@@ -911,17 +898,14 @@
 	 *
 	 * @param int $user_id  ID of the user.
 	 * @param int $group_id ID of the group.
-	 * @return mixed
+	 * @return int
 	 */
 	public static function check_is_member( $user_id, $group_id ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp = buddypress();
-
-		return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 1 AND is_banned = 0", $user_id, $group_id ) );
+		return (int) groups_is_user_member( $user_id, $group_id );
 	}
 
 	/**
@@ -931,17 +915,14 @@
 	 *
 	 * @param int $user_id  ID of the user.
 	 * @param int $group_id ID of the group.
-	 * @return mixed
+	 * @return int
 	 */
 	public static function check_is_banned( $user_id, $group_id ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp = buddypress();
-
-		return $wpdb->get_var( $wpdb->prepare( "SELECT is_banned FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d", $user_id, $group_id ) );
+		return (int) groups_is_user_banned( $user_id, $group_id );
 	}
 
 	/**
@@ -975,14 +956,11 @@
 	 * @return int|null ID of the membership if found, otherwise false.
 	 */
 	public static function check_for_membership_request( $user_id, $group_id ) {
-		global $wpdb;
-
-		if ( empty( $user_id ) )
+		if ( empty( $user_id ) ) {
 			return false;
+		}
 
-		$bp = buddypress();
-
-		return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND is_banned = 0 AND inviter_id = 0", $user_id, $group_id ) );
+		return (int) groups_check_for_membership_request( $user_id, $group_id );
 	}
 
 	/**
Index: tests/phpunit/testcases/groups/class-bp-groups-member.php
===================================================================
--- tests/phpunit/testcases/groups/class-bp-groups-member.php
+++ tests/phpunit/testcases/groups/class-bp-groups-member.php
@@ -990,7 +990,7 @@
 		$this->assertTrue( is_numeric( $member ) && $member > 0 );
 		// Check that the invite has been removed.
 		$invite = groups_check_user_has_invite( $u2, $g1, 'all' );
-		$this->assertTrue( is_null( $invite ) );
+		$this->assertFalse( $invite );
 	}
 
 	/**
