Index: bp-groups.php
===================================================================
--- bp-groups.php	(revision 2002)
+++ bp-groups.php	(working copy)
@@ -146,7 +146,7 @@
 		'group-invites' => array( 'name' => __( 'Group Invites', 'buddypress' ), 'position' => 30 )
 	) );
 	
-	$bp->groups->valid_status = apply_filters( 'groups_valid_status', array( 'public', 'private', 'hidden' ) );
+	$bp->groups->valid_status = apply_filters( 'groups_valid_status', array( 'public', 'private', 'hidden', 'semi' ) );
 
 	do_action( 'groups_setup_globals' );
 }
@@ -272,7 +272,7 @@
 				bp_core_new_subnav_item( array( 'name' => __( 'Admin', 'buddypress' ), 'slug' => 'admin', 'parent_url' => $group_link, 'parent_slug' => $bp->groups->slug, 'screen_function' => 'groups_screen_group_admin', 'position' => 20, 'user_has_access' => ( $bp->is_item_admin + (int)$bp->is_item_mod ), 'item_css_id' => 'group-admin' ) );
 
 			// If this is a private group, and the user is not a member, show a "Request Membership" nav item.
-			if ( is_user_logged_in() && !$bp->groups->current_group->is_user_member && !groups_check_for_membership_request( $bp->loggedin_user->id, $bp->groups->current_group->id ) && $bp->groups->current_group->status == 'private' )
+			if ( is_user_logged_in() && !$bp->groups->current_group->is_user_member && !groups_check_for_membership_request( $bp->loggedin_user->id, $bp->groups->current_group->id ) && $bp->groups->current_group->status == 'private' || is_user_logged_in() && !$bp->groups->current_group->is_user_member && !groups_check_for_membership_request( $bp->loggedin_user->id, $bp->groups->current_group->id ) && $bp->groups->current_group->status == 'semi')
 				bp_core_new_subnav_item( array( 'name' => __( 'Request Membership', 'buddypress' ), 'slug' => 'request-membership', 'parent_url' => $group_link, 'parent_slug' => $bp->groups->slug, 'screen_function' => 'groups_screen_group_request_membership', 'position' => 30 ) );
 
 			if ( $bp->groups->current_group->enable_forum && function_exists('bp_forums_setup') )
@@ -481,6 +481,8 @@
 				$group_status = 'private';
 			else if ( 'hidden' == $_POST['group-status'] )
 				$group_status = 'hidden';
+			else if ( 'semi' == $_POST['group-status'] )
+				$group_status = 'semi';
 		
 			if ( !$bp->groups->new_group_id = groups_create_group( array( 'group_id' => $bp->groups->new_group_id, 'status' => $group_status, 'enable_wire' => $group_enable_wire, 'enable_forum' => $group_enable_forum ) ) ) {
 				bp_core_add_message( __( 'There was an error saving group details, please try again.', 'buddypress' ), 'error' );
@@ -924,7 +926,7 @@
 	if ( !is_user_logged_in() )
 		return false;
 	
-	if ( 'private' == $bp->groups->current_group->status ) {
+	if ( 'private' == $bp->groups->current_group->status || 'semi' == $bp->groups->current_group->status ) {
 		// If the user has submitted a request, send it.
 		if ( isset( $_POST['group-request-send']) ) {
 			/* Check the nonce first. */
@@ -1010,7 +1012,7 @@
 			$enable_photos = ( isset($_POST['group-show-photos'] ) ) ? 1 : 0;
 			$photos_admin_only = ( $_POST['group-photos-status'] != 'all' ) ? 1 : 0;
 			
-			$allowed_status = apply_filters( 'groups_allowed_status', array( 'public', 'private', 'hidden' ) );
+			$allowed_status = apply_filters( 'groups_allowed_status', array( 'public', 'private', 'hidden', 'semi' ) );
 			$status = ( in_array( $_POST['group-status'], (array)$allowed_status ) ) ? $_POST['group-status'] : 'public';
 			
 			/* Check the nonce first. */
