diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
index b23780ae4..f9bb87405 100644
--- src/bp-groups/bp-groups-functions.php
+++ src/bp-groups/bp-groups-functions.php
@@ -3531,3 +3531,52 @@ function bp_groups_migrate_invitations() {
 		$wpdb->query( "DELETE FROM {$bp->groups->table_name_members} WHERE ID IN ($ids_to_delete)" );
 	}
 }
+
+/**
+ * Register a new Group Extension.
+ *
+ * @since 1.1.0
+ * @since 10.0.0 The function was moved from the `/bp-groups/classes/class-bp-group-extension.php` file.
+ *               It only registers Group Extensions if their corresponding class name has not been already
+ *               registered.
+ *
+ * @param string $group_extension_class Name of the Extension class.
+ * @return bool                         Returns true on success, otherwise false.
+ */
+function bp_register_group_extension( $group_extension_class = '' ) {
+	if ( ! class_exists( $group_extension_class ) ) {
+		return false;
+	}
+
+	$bp = buddypress();
+
+	if ( isset( $bp->groups->group_extensions[ $group_extension_class ] ) ) {
+		return false;
+	}
+
+	// Add the new Group extension to the registered ones.
+	$bp->groups->group_extensions[ $group_extension_class ] = true;
+
+	return true;
+}
+
+/**
+ * Init Registered Group Extensions.
+ *
+ * @since 10.0.0
+ */
+function bp_init_group_extensions() {
+	$registered_group_extensions = buddypress()->groups->group_extensions;
+
+	if ( ! $registered_group_extensions ) {
+		return;
+	}
+
+	foreach ( array_keys( $registered_group_extensions ) as $group_extension_class ) {
+		$extension = new $group_extension_class;
+
+		add_action( 'bp_actions', array( &$extension, '_register' ), 8 );
+		add_action( 'admin_init', array( &$extension, '_register' ) );
+	}
+}
+add_action( 'bp_init', 'bp_init_group_extensions', 11 );
diff --git src/bp-groups/classes/class-bp-group-extension.php src/bp-groups/classes/class-bp-group-extension.php
index 1a12ebcee..e89f3b890 100644
--- src/bp-groups/classes/class-bp-group-extension.php
+++ src/bp-groups/classes/class-bp-group-extension.php
@@ -10,6 +10,7 @@
 // Exit if accessed directly.
 defined( 'ABSPATH' ) || exit;
 
+if ( ! class_exists( 'BP_Group_Extension', false ) ) :
 /**
  * API for creating group extensions without having to hardcode the content into
  * the theme.
@@ -1695,26 +1696,4 @@ class BP_Group_Extension {
 		}
 	}
 }
-
-/**
- * Register a new Group Extension.
- *
- * @since 1.1.0
- *
- * @param string $group_extension_class Name of the Extension class.
- * @return false|null Returns false on failure, otherwise null.
- */
-function bp_register_group_extension( $group_extension_class = '' ) {
-
-	if ( ! class_exists( $group_extension_class ) ) {
-		return false;
-	}
-
-	// Register the group extension on the bp_init action so we have access
-	// to all plugins.
-	add_action( 'bp_init', function() use ( $group_extension_class ) {
-		$extension = new $group_extension_class;
-		add_action( 'bp_actions', array( &$extension, '_register' ), 8 );
-		add_action( 'admin_init', array( &$extension, '_register' ) );
-	}, 11 );
-}
+endif; // End class_exists check.
diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
index df567e36f..c8c9b7787 100644
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -94,6 +94,16 @@ class BP_Groups_Component extends BP_Component {
 	 */
 	public $current_directory_type = '';
 
+	/**
+	 * List of registered Group extensions.
+	 *
+	 * @see bp_register_group_extension()
+	 *
+	 * @since 10.0.0
+	 * @var array
+	 */
+	public $group_extensions = array();
+
 	/**
 	 * Start the groups component creation process.
 	 *
