--- buddypress/bp-activity/bp-activity-actions.php	Tue May 10 14:50:10 2011
+++ buddypress/bp-activity/bp-activity-actions.php	Wed May 11 22:41:03 2011
@@ -24,37 +24,25 @@
 		return false;
 
 	// Get the activity details
-	$activity = bp_activity_get_specific( array( 'activity_ids' => $bp->action_variables[0] ) );
+	$activity = bp_activity_get_specific( array( 'activity_ids' => $bp->action_variables[0], 'show_hidden' => true ) );
 
 	// Redirect to root if activity does not exist
 	if ( !$activity = $activity['activities'][0] )
 		bp_core_redirect( bp_get_root_domain() );
 
-	// Do not redirect at default
-	$redirect = false;
+	// Default redirect is to /members/[username]/id/
+	$redirect = bp_core_get_user_domain( $activity->user_id, $activity->user_nicename, $activity->user_login ) . $bp->activity->slug . '/' . $activity->id . '/';
 
 	// Redirect based on the type of activity
 	if ( bp_is_active( 'groups' ) && $activity->component == $bp->groups->id ) {
 
-		// Activity is a user update
-		if ( !empty( $activity->user_id ) ) {
-			$redirect = bp_core_get_user_domain( $activity->user_id, $activity->user_nicename, $activity->user_login ) . $bp->activity->slug . '/' . $activity->id . '/';
-
-		// Activity is something else
-		} else {
-
-			// Set redirect to group activity stream
-			if ( $group = groups_get_group( array( 'group_id' => $activity->item_id ) ) ) {
-				$redirect = bp_get_group_permalink( $group ) . $bp->activity->slug . '/' . $activity->id . '/';
-			}
+		// Set redirect to group activity stream
+		if ( $group = groups_get_group( array( 'group_id' => $activity->item_id ) ) ) {
+			$redirect = bp_get_group_permalink( $group ) . $bp->activity->slug . '/' . $activity->id . '/';
 		}
-
-	// Set redirect to users' activity stream
-	} else {
-		$redirect = bp_core_get_user_domain( $activity->user_id, $activity->user_nicename, $activity->user_login ) . $bp->activity->slug . '/' . $activity->id;
 	}
 
-	// Allow redirect to be filtered
+	// Allow redirect to be filtered, return false to redirect to root
 	if ( !$redirect = apply_filters( 'bp_activity_permalink_redirect_url', $redirect, &$activity ) )
 		bp_core_redirect( bp_get_root_domain() );
 
--- buddypress/bp-activity/bp-activity-screens.php	Tue May 10 14:50:19 2011
+++ buddypress/bp-activity/bp-activity-screens.php	Wed May 11 23:18:48 2011
@@ -74,43 +74,18 @@
 	// No displayed user or not viewing activity component
 	if ( !bp_is_activity_component() )
 		return false;
-	
-	if ( empty( $bp->current_action ) || !is_numeric( $bp->current_action ) ) 
-		return false; 
-	
+
+	if ( empty( $bp->current_action ) || !is_numeric( $bp->current_action ) )
+		return false;
+
 	// Get the activity details
-	$activity = bp_activity_get_specific( array( 'activity_ids' => bp_current_action() ) );
+	$activity = bp_activity_get_specific( array( 'activity_ids' => bp_current_action(), 'show_hidden' => true ) );
 
 	if ( !$activity = $activity['activities'][0] )
 		bp_core_redirect( bp_get_root_domain() );
 
-	// Default access is true
-	$has_access = true;
-
-	// If activity is from a group, do an extra cap check
-	if ( isset( $bp->groups->id ) && $activity->component == $bp->groups->id ) {
-
-		// Activity is from a group, but groups is currently disabled
-		if ( !bp_is_active( 'groups') )
-			bp_core_redirect( bp_get_root_domain() );
-
-		// Check to see if the group is not public, if so, check the
-		// user has access to see this activity
-		if ( $group = groups_get_group( array( 'group_id' => $activity->item_id ) ) ) {
-
-			// Group is not public
-			if ( 'public' != $group->status ) {
-
-				// User is not a member of group
-				if ( !groups_is_user_member( $bp->loggedin_user->id, $group->id ) ) {
-					$has_access = false;
-				}
-			}
-		}
-	}
-
-	// Allow access to be filtered
-	$has_access = apply_filters( 'bp_activity_permalink_access', $has_access, &$activity );
+	// Default access is true; allow access to be filtered
+	$has_access = apply_filters( 'bp_activity_permalink_access', true, &$activity );
 
 	// Allow additional code execution
 	do_action( 'bp_activity_screen_single_activity_permalink', $activity, $has_access );
--- buddypress/bp-core/bp-core-template.php	Wed May 11 23:20:23 2011
+++ buddypress/bp-core/bp-core-template.php	Wed May 11 23:20:47 2011
@@ -34,7 +34,7 @@
 			$the_index = $bp->current_item;
 		}
 	}
-	
+
 	// Loop through each navigation item
 	foreach ( (array)$bp->bp_options_nav[$the_index] as $subnav_item ) {
 		if ( !$subnav_item['user_has_access'] )
@@ -242,7 +242,7 @@
 	// Displayed user
 	} elseif ( !empty( $bp->displayed_user->fullname ) && !is_404() ) {
 		// translators: "displayed user's name | canonicalised component name"
-		$title = strip_tags( sprintf( __( '%1$s &#124; %2$s', 'buddypress' ), $bp->displayed_user->fullname, ucwords( bp_current_component() ) ) ); 
+		$title = strip_tags( sprintf( __( '%1$s &#124; %2$s', 'buddypress' ), $bp->displayed_user->fullname, ucwords( bp_current_component() ) ) );
 
 	// A single group
 	} elseif ( bp_is_active( 'groups' ) && !empty( $bp->groups->current_group ) && !empty( $bp->bp_options_nav[$bp->groups->current_group->slug] ) ) {
@@ -964,7 +964,10 @@
 	if ( bp_is_current_component( 'activity' ) && is_numeric( $bp->current_action ) )
 		return true;
 
-	return false;
+	if ( bp_group_is_activity_permalink() )
+		return true;
+
+	return apply_filters( 'bp_is_single_activity', false );
 }
 
 /** User **********************************************************************/
--- buddypress/bp-groups/bp-groups-screens.php	Wed May 11 14:33:04 2011
+++ buddypress/bp-groups/bp-groups-screens.php	Wed May 11 22:42:01 2011
@@ -437,7 +437,36 @@
 
 	$bp->is_single_item = true;
 
-	bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) );
+	// Get the activity details
+	$activity = bp_activity_get_specific( array( 'activity_ids' => $bp->action_variables[0], 'show_hidden' => true ) );
+
+	// If no activities, redirect to root
+	if ( !$activity = $activity['activities'][0] )
+		bp_core_redirect( bp_get_root_domain() );
+
+	// If activity isn't from the current group, redirect to root
+	if ( $activity->item_id != $bp->groups->current_group->id )
+		bp_core_redirect( bp_get_root_domain() );
+
+	// Grab group access status; allow access to be filtered
+	$has_access = apply_filters( 'bp_group_activity_permalink_access', $bp->groups->current_group->user_has_access, &$activity );
+
+	// Allow additional code execution
+	do_action( 'bp_group_screen_single_activity_permalink', $activity, $has_access );
+
+	// Access is specifically disallowed
+	if ( false === $has_access ) {
+
+		// User feedback
+		bp_core_add_message( __( 'You do not have access to this activity.', 'buddypress' ), 'error' );
+
+		// Redirect based on logged in status
+		is_user_logged_in() ?
+			bp_core_redirect( $bp->loggedin_user->domain ) :
+			bp_core_redirect( site_url( 'wp-login.php?redirect_to=' . bp_get_group_permalink( $bp->groups->current_group ) . $bp->activity->slug . '/' . $activity->id . '/' ) );
+	}
+
+	bp_core_load_template( apply_filters( 'groups_template_group_activity_permalink', 'groups/single/activity/permalink' ) );
 }
 add_action( 'bp_screens', 'groups_screen_group_activity_permalink' );
 
--- buddypress/bp-groups/bp-groups-template.php	Wed May 11 23:19:22 2011
+++ buddypress/bp-groups/bp-groups-template.php	Wed May 11 23:20:04 2011
@@ -625,6 +625,20 @@
 	return true;
 }
 
+function bp_group_activity_id() {
+	echo bp_group_get_activity_id();
+}
+	function bp_group_get_activity_id() {
+		global $bp;
+
+		if ( bp_group_is_activity_permalink() ) {
+			if ( $id = $bp->action_variables[0] )
+				return $id;
+		}
+
+		return false;
+	}
+
 function bp_groups_pagination_links() {
 	echo bp_get_groups_pagination_links();
 }
@@ -1452,9 +1466,9 @@
 	var $total_group_count;
 
 	function bp_groups_group_members_template( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude ) {
-		$this->__construct( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude );	
+		$this->__construct( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude );
 	}
-	
+
 	function __construct( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude ) {
 		global $bp;
 
@@ -2174,10 +2188,10 @@
 	function bp_groups_membership_requests_template( $group_id, $per_page, $max ) {
 		$this->__construct( $group_id, $per_page, $max );
 	}
-	
-	
+
+
 	function __construct( $group_id, $per_page, $max ) {
-		
+
 		global $bp;
 
 		$this->pag_page = isset( $_REQUEST['mrpage'] ) ? intval( $_REQUEST['mrpage'] ) : 1;
@@ -2348,13 +2362,13 @@
 	var $total_invite_count;
 
 	function bp_groups_invite_template( $user_id, $group_id ) {
-		$this->__construct( $user_id, $group_id ); 
+		$this->__construct( $user_id, $group_id );
 	}
-		
+
 	function __construct( $user_id, $group_id ) {
 
 		global $bp;
-		
+
 		$this->invites = groups_get_invites_for_group( $user_id, $group_id );
 		$this->invite_count = count( $this->invites );
 
--- buddypress/bp-themes/bp-default/groups/single/activity/permalink.php	Wed May 11 23:23:15 2011
+++ buddypress/bp-themes/bp-default/groups/single/activity/permalink.php	Wed May 11 23:21:19 2011
@@ -0,0 +1,17 @@
+<?php get_header( 'buddypress' ) ?>
+
+<div class="activity no-ajax" role="main">
+	<?php if ( bp_has_activities( 'display_comments=threaded&show_hidden=true&include=' . bp_group_get_activity_id() ) ) : ?>
+
+		<ul id="activity-stream" class="activity-list item-list">
+		<?php while ( bp_activities() ) : bp_the_activity(); ?>
+
+			<?php locate_template( array( 'activity/entry.php' ), true ) ?>
+
+		<?php endwhile; ?>
+		</ul>
+
+	<?php endif; ?>
+</div>
+
+<?php get_footer( 'buddypress' ) ?>
\ No newline at end of file
