Index: src/bp-core/admin/bp-core-components.php
--- src/bp-core/admin/bp-core-components.php
+++ src/bp-core/admin/bp-core-components.php
@@ -299,7 +299,9 @@
 		$current_action = $_GET['action'];
 	}
 
-	$current_components = buddypress()->active_components;
+	$current_components       = buddypress()->active_components;
+	$packaged_components      = array_flip( bp_core_get_packaged_component_ids() );
+	$custom_active_components = array_diff_key( $current_components, $packaged_components );
 
 	switch ( $current_action ) {
 		case 'retired' :
@@ -307,6 +309,11 @@
 			foreach ( array_keys( $retired_components ) as $retired_component ) {
 				if ( ! isset( $submitted[ $retired_component ] ) ) {
 					unset( $current_components[ $retired_component ] );
+
+					// Make sure custom components does not contain a retired component
+					if ( isset( $custom_active_components[ $retired_component ] ) ) {
+						unset( $custom_active_components[ $retired_component ] );
+					}
 				}
 			}
 			// fall through
@@ -322,7 +329,8 @@
 			break;
 	}
 
-	return $components;
+	// Active components is the list of packaged and custom components
+	return array_merge( $components, $custom_active_components );
 }
 
 /**
Index: tests/phpunit/testcases/admin/functions.php
--- tests/phpunit/testcases/admin/functions.php
+++ tests/phpunit/testcases/admin/functions.php
@@ -38,6 +38,9 @@
 		$this->assertEquals( bp_admin_list_table_current_bulk_action(), 'foo' );
 	}
 
+	/**
+	 * @group bp_core_admin_get_active_components_from_submitted_settings
+	 */
 	public function test_bp_core_admin_get_active_components_from_submitted_settings() {
 		$get_action = isset( $_GET['action'] ) ? $_GET['action'] : null;
 		$ac = buddypress()->active_components;
@@ -122,6 +125,38 @@
 	}
 
 	/**
+	 * @group BP6244
+	 * @group bp_core_admin_get_active_components_from_submitted_settings
+	 */
+	public function test_bp_core_admin_get_active_components_from_submitted_settings_should_keep_custom_component_directory_page() {
+		$bp = buddypress();
+		$reset_active_components = $bp->active_components;
+
+		// Create and activate the foo component
+		$bp->foo = new BP_Component;
+		$bp->foo->id   = 'foo';
+		$bp->foo->slug = 'foo';
+		$bp->foo->name = 'Foo';
+		$bp->active_components[ $bp->foo->id ] = 1;
+		$new_page_ids = array( $bp->foo->id => $this->factory->post->create( array(
+			'post_type'  => 'page',
+			'post_title' => $bp->foo->name,
+			'post_name'  => $bp->foo->slug,
+		) ) );
+
+		$page_ids = array_merge( $new_page_ids, (array) bp_core_get_directory_page_ids() );
+		bp_core_update_directory_page_ids( $page_ids );
+
+		$bp->active_components = bp_core_admin_get_active_components_from_submitted_settings( $reset_active_components );
+		bp_core_add_page_mappings( $bp->active_components );
+
+		$this->assertContains( $bp->foo->id, array_keys( bp_core_get_directory_page_ids() ) );
+
+		// Reset buddypress() vars
+		$bp->active_components = $reset_active_components;
+	}
+
+	/**
 	 * @group bp_core_activation_notice
 	 */
 	public function test_bp_core_activation_notice_register_activate_pages_notcreated_signup_allowed() {
