Index: bp-groups/bp-groups-functions.php
===================================================================
--- bp-groups/bp-groups-functions.php	(revision 7132)
+++ bp-groups/bp-groups-functions.php	(working copy)
@@ -615,6 +615,13 @@
 		return false;
 
 	if ( !groups_is_user_member( $user_id, $group_id ) && !groups_check_user_has_invite( $user_id, $group_id, 'all' ) ) {
+
+		// Check if the user already requested members - if so, simply accept membership request
+		if ( $membership_id = groups_check_for_membership_request ( $user_id, $group_id ) ) {
+			groups_accept_membership_request ($membership_id, $user_id, $group_id);
+			return true;
+		}
+
 		$invite                = new BP_Groups_Member;
 		$invite->group_id      = $group_id;
 		$invite->user_id       = $user_id;
@@ -833,6 +840,12 @@
 	if ( groups_is_user_member( $requesting_user_id, $group_id ) || groups_is_user_banned( $requesting_user_id, $group_id ) )
 		return false;
 
+	// Check if the user is already invited - if so, simply accept invite
+	if ( groups_check_user_has_invite ( $requesting_user_id, $group_id ) ) {
+		groups_accept_invite ( $requesting_user_id, $group_id );
+		return true;
+	}
+
 	$requesting_user                = new BP_Groups_Member;
 	$requesting_user->group_id      = $group_id;
 	$requesting_user->user_id       = $requesting_user_id;
Index: bp-groups/bp-groups-screens.php
===================================================================
--- bp-groups/bp-groups-screens.php	(revision 7132)
+++ bp-groups/bp-groups-screens.php	(working copy)
@@ -467,6 +467,13 @@
 	if ( 'private' != $bp->groups->current_group->status )
 		return false;
 
+	// If the user is already invited, accept invitation
+	if ( groups_check_user_has_invite ( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
+		groups_accept_invite ( bp_loggedin_user_id(), $bp->groups->current_group->id );
+		bp_core_add_message( __( 'Group invite accepted', 'buddypress' ) );
+		bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) );
+	}
+
 	// If the user has submitted a request, send it.
 	if ( isset( $_POST['group-request-send']) ) {
 
Index: bp-templates/bp-legacy/buddypress-functions.php
===================================================================
--- bp-templates/bp-legacy/buddypress-functions.php	(revision 7132)
+++ bp-templates/bp-legacy/buddypress-functions.php	(working copy)
@@ -1004,7 +1004,13 @@
 		} elseif ( 'private' == $group->status ) {
 			check_ajax_referer( 'groups_request_membership' );
 
-			if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
+			if ( groups_check_user_has_invite ( bp_loggedin_user_id(), $groups->id ) ) {
+				if ( ! groups_accept_invite ( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
+					_e( 'Error requesting membership', 'buddypress' );
+				} else {
+					echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
+				}
+			} elseif ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
 				_e( 'Error requesting membership', 'buddypress' );
 			} else {
 				echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
Index: bp-themes/bp-default/_inc/ajax.php
===================================================================
--- bp-themes/bp-default/_inc/ajax.php	(revision 7132)
+++ bp-themes/bp-default/_inc/ajax.php	(working copy)
@@ -719,7 +719,13 @@
 		} elseif ( 'private' == $group->status ) {
 			check_ajax_referer( 'groups_request_membership' );
 
-			if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
+			if ( groups_check_user_has_invite ( bp_loggedin_user_id(), $groups->id ) ) {
+				if ( ! groups_accept_invite ( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
+					_e( 'Error requesting membership', 'buddypress' );
+				} else {
+					echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
+				}
+			} elseif ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
 				_e( 'Error requesting membership', 'buddypress' );
 			} else {
 				echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
