Index: bp-core/bp-core-buddybar.php
===================================================================
--- bp-core/bp-core-buddybar.php
+++ bp-core/bp-core-buddybar.php
@@ -81,8 +81,11 @@ function bp_core_new_nav_item( $args = '' ) {
 		if ( !empty( $default_subnav_slug ) && bp_is_current_action( $default_subnav_slug ) && !bp_action_variable( 0 ) ) {
 			unset( $bp->canonical_stack['action'] );
 		} elseif ( ! bp_current_action() ) {
-			$func = is_object( $screen_function[0] ) ? array( &$screen_function[0], $screen_function[1] ) : $screen_function;
-			add_action( 'bp_screens', $func, 3 );
+
+			// Add our screen hook if screen function is callable
+			if ( is_callable( $screen_function ) ) {
+				add_action( 'bp_screens', $screen_function, 3 );
+			}
 
 			if ( !empty( $default_subnav_slug ) ) {
 				$bp->current_action = apply_filters( 'bp_default_component_subnav', $default_subnav_slug, $r );
@@ -112,9 +115,8 @@ function bp_core_new_nav_default( $args = '' ) {
 	extract( $r, EXTR_SKIP );
 
 	if ( $function = $bp->bp_nav[$parent_slug]['screen_function'] ) {
-		if ( is_object( $function[0] ) ) {
-			remove_action( 'bp_screens', array( &$function[0], $function[1] ), 3 );
-		} else {
+		// Remove our screen hook if screen function is callable
+		if ( is_callable( $function ) ) {
 			remove_action( 'bp_screens', $function, 3 );
 		}
 	}
@@ -136,9 +138,7 @@ function bp_core_new_nav_default( $args = '' ) {
 		// No subnav item has been requested in the URL, so set a new nav default
 		if ( empty( $unfiltered_action ) ) {
 			if ( !bp_is_current_action( $subnav_slug ) ) {
-				if ( is_object( $screen_function[0] ) ) {
-					add_action( 'bp_screens', array( &$screen_function[0], $screen_function[1] ), 3 );
-				} else {
+				if ( is_callable( $screen_function ) ) {
 					add_action( 'bp_screens', $screen_function, 3 );
 				}
 
@@ -278,9 +278,8 @@ function bp_core_new_subnav_item( $args = '' ) {
 
 		// Before hooking the screen function, check user access
 		if ( !empty( $user_has_access ) ) {
-			if ( is_object( $screen_function[0] ) ) {
-				add_action( 'bp_screens', array( &$screen_function[0], $screen_function[1] ), 3 );
-			} else {
+			// Add our screen hook if screen function is callable
+			if ( is_callable( $screen_function ) ) {
 				add_action( 'bp_screens', $screen_function, 3 );
 			}
 		} else {
@@ -390,9 +389,8 @@ function bp_core_remove_nav_item( $parent_id ) {
 		return false;
 
 	if ( $function = $bp->bp_nav[$parent_id]['screen_function'] ) {
-		if ( is_object( $function[0] ) ) {
-			remove_action( 'bp_screens', array( &$function[0], $function[1] ), 3 );
-		} else {
+		// Remove our screen hook if screen function is callable
+		if ( is_callable( $function ) ) {
 			remove_action( 'bp_screens', $function, 3 );
 		}
 	}
@@ -412,10 +410,9 @@ function bp_core_remove_subnav_item( $parent_id, $slug ) {
 
 	$screen_function = isset( $bp->bp_options_nav[$parent_id][$slug]['screen_function'] ) ? $bp->bp_options_nav[$parent_id][$slug]['screen_function'] : false;
 
-	if ( !empty( $screen_function ) ) {
-		if ( is_object( $screen_function[0] ) ) {
-			remove_action( 'bp_screens', array( &$screen_function[0], $screen_function[1] ), 3 );
-		} else {
+	if ( ! empty( $screen_function ) ) {
+		// Remove our screen hook if screen function is callable
+		if ( is_callable( $screen_function ) ) {
 			remove_action( 'bp_screens', $screen_function, 3 );
 		}
 	}
