diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
index b5e857a..80c89d8 100644
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -848,9 +848,16 @@ function bp_setup_nav_menu_item( $menu_item ) {
 		return $menu_item;
 	}
 
+	// Prevent a notice error when using the customizer
+	$menu_classes = $menu_item->classes;
+
+	if ( is_array( $menu_classes ) ) {
+		$menu_classes = implode( ' ', $menu_item->classes);
+	}
+
 	// We use information stored in the CSS class to determine what kind of
 	// menu item this is, and how it should be treated
-	preg_match( '/\sbp-(.*)-nav/', implode( ' ', $menu_item->classes), $matches );
+	preg_match( '/\sbp-(.*)-nav/', $menu_classes, $matches );
 
 	// If this isn't a BP menu item, we can stop here
 	if ( empty( $matches[1] ) ) {
@@ -904,7 +911,11 @@ function bp_setup_nav_menu_item( $menu_item ) {
 	} else {
 		$current = bp_get_requested_url();
 		if ( strpos( $current, $menu_item->url ) !== false ) {
-			$menu_item->classes[] = 'current_page_item';
+			if ( is_array( $menu_item->classes ) ) {
+				$menu_item->classes[] = 'current_page_item';
+			} else {
+				$menu_item->classes = array( 'current_page_item' );
+			}
 		}
 	}
 
@@ -913,6 +924,79 @@ function bp_setup_nav_menu_item( $menu_item ) {
 add_filter( 'wp_setup_nav_menu_item', 'bp_setup_nav_menu_item', 10, 1 );
 
 /**
+ * Populate BuddyPress item navs for the customizer
+ *
+ * NB: this will only work if WP_Customize_Nav_Menus->ajax_load_available_items()
+ * includes a filter to let plugins get specific item navs.
+ * @see WordPress ticket https://core.trac.wordpress.org/ticket/32708
+ *
+ * @since  BuddyPress (?)
+ *
+ * @param  array   $items an empty array
+ * @param  string  $type  the requested type
+ * @param  integer $page  the page num being requested
+ * @return array          a list of bp nav items structured for the customizer
+ */
+function bp_customizer_nav_menus_get_items( $items =  array(), $type = '', $page = 0 ) {
+	if ( 0 !== $page ) {
+		return $items;
+	}
+
+	if ( 'bp_loggedin_nav' === $type ) {
+		$bp_items = bp_nav_menu_get_loggedin_pages();
+	} elseif( 'bp_loggedout_nav' === $type ) {
+		$bp_items = bp_nav_menu_get_loggedout_pages();
+	} else {
+		return $items;
+	}
+
+	foreach( $bp_items as $bp_item ) {
+		$items[] = array(
+			'id'         => "bp-{$bp_item->post_excerpt}",
+			'title'      => html_entity_decode( $bp_item->post_title, ENT_QUOTES, get_bloginfo( 'charset' ) ),
+			'type'       => 'custom',
+			'url'        => esc_url_raw( $bp_item->guid ),
+			'classes'    => array( 'bp-menu', "bp-{$bp_item->post_excerpt}-nav" ),
+			'type_label' => __( 'BuddyPress nav', 'buddypress' ),
+			'object'     => 'bp_nav',
+			'object_id'  => -1,
+		);
+	}
+
+	return $items;
+}
+add_filter( 'customizer_nav_menus_bp_nav_get_items', 'bp_customizer_nav_menus_get_items', 10, 3 );
+
+/**
+ * Set BuddyPress item navs for the customizer
+ *
+ * NB: this will only work if WP_Customize_Nav_Menus->available_item_types()
+ * includes a filter to let plugins set specific item navs.
+ * @see WordPress ticket https://core.trac.wordpress.org/ticket/32708
+ *
+ * @since  BuddyPress (?)
+ *
+ * @param  array $item_types an associative array structured for the customizer
+ */
+function bp_customizer_nav_menus_set_item_types( $item_types = array() ) {
+	$item_types['bp_nav'] = array(
+		'bp_loggedin_nav' => array(
+			'label' => __( 'BuddyPress (logged-in)', 'buddypress' ),
+			'name'  => 'bp_loggedin_nav',
+			'type'  => 'bp_nav',
+		),
+		'bp_loggedout_nav' => array(
+			'label' => __( 'BuddyPress (logged-out)', 'buddypress' ),
+			'name'  => 'bp_loggedout_nav',
+			'type'  => 'bp_nav',
+		),
+	);
+
+	return $item_types;
+}
+add_filter( 'customizer_nav_menus_item_types', 'bp_customizer_nav_menus_set_item_types', 10, 1 );
+
+/**
  * Filter SQL query strings to swap out the 'meta_id' column.
  *
  * WordPress uses the meta_id column for commentmeta and postmeta, and so
