diff --git src/includes/extend/buddypress/groups.php src/includes/extend/buddypress/groups.php
index 408bf1e..8cd02f9 100644
--- src/includes/extend/buddypress/groups.php
+++ src/includes/extend/buddypress/groups.php
@@ -99,6 +99,15 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 
 		// Adds a hidden input value to the "Group Settings" page
 		add_action( 'bp_before_group_settings_admin', array( $this, 'group_settings_hidden_field'     ) );
+
+		// Remove subscriptions/favorites when a user is banned from a group.
+		add_action( 'groups_ban_member',              array( $this, 'leave_group_unsubscribe' ), 10, 2  );
+
+		// Remove subscriptions/favorites when a user is removed from a group.
+		add_action( 'groups_remove_member',           array( $this, 'leave_group_unsubscribe' ), 10, 2  );
+
+		// Remove subscriptions/favorites when a user leaves a group.
+		add_action( 'groups_leave_group',             array( $this, 'leave_group_unsubscribe' ), 10, 2  );
 	}
 
 	/**
@@ -1505,5 +1514,119 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
 
 		return $args;
 	}
+
+	/** Subscriptions/Favorites ***********************************************/
+
+	/**
+	 * Unsubscribe user from all forums and topics when leaving a group.
+	 *
+	 * @since 2.6.0 bbPress (rXXXX)
+	 *
+	 * @param int $group_id ID of the group.
+	 * @param int $user_id  The user whose subscriptions/favorites need to be
+	 *                      deleted.
+	 *
+	 * @return bool True if any have been deleted.
+	 */
+	public function leave_group_unsubscribe( $group_id = 0, $user_id = 0 ) {
+
+		// We need both ids to be successful.
+		if ( empty( $group_id ) || empty( $user_id ) ) {
+			return false;
+		}
+
+		// Get the current filter for later use.
+		$current_filter = current_filter();
+
+		// Bail early if the user is leaving, not removing. Wait for round two.
+		// See https://buddypress.trac.wordpress.org/ticket/6597.
+		if ( 'groups_remove_member' === $current_filter && 'leave-group' === bp_current_action() ) {
+			return false;
+		}
+
+		// Is a user leaving, being removed, or getting banned?
+		if ( 'groups_remove_member' === $current_filter ) {
+			$action = 'remove';
+		} elseif ( 'groups_ban_member' === $current_filter ) {
+			$action = 'ban';
+		} else {
+			$action = 'leave';
+		}
+
+		/**
+		 * Fires before group forum/topic subscriptions and favorites are
+		 * removed for a user.
+		 *
+		 * Allows plugin developers to short-circuit the unsubscribe process.
+		 *
+		 * @since 2.6.0 bbPress (rXXXX)
+		 *
+		 * @param bool $unsubscribe Should we unsubscribe?
+		 * @param int  $group_id    The group id the user is leaving.
+		 * @param int  $user_id     The user id.
+		 * @param int  $action      The action taken by or against the user.
+		 */
+		$unsubscribe = apply_filters( 'bbp_leave_group_unsubscribe', true, $group_id, $user_id, $action );
+		if ( ! $unsubscribe ) {
+			return false;
+		}
+
+		// Get the forum associated with the group. If there are none, bail.
+		$forum_ids = bbp_get_group_forum_ids( $group_id );
+		if ( empty( $forum_ids ) ) {
+			return false;
+		}
+
+		// Get the user's forum and topic subcriptions.
+		$forum_subscriptions = bbp_get_user_subscribed_forum_ids( $user_id );
+		$topic_subscriptions = bbp_get_user_subscribed_topic_ids( $user_id );
+
+		// Get the user's topic favorites.
+		$topic_favorites = bbp_get_user_favorites_topic_ids( $user_id );
+
+		// If no subscriptions, bail.
+		if ( empty( $forum_subscriptions ) && empty( $topic_subscriptions ) && empty( $topic_favorites ) ) {
+			return false;
+		}
+
+		// Set default return value.
+		$retval = false;
+
+		// Loop over all of the forums to get all the topics.
+		foreach ( $forum_ids as $forum_id ) {
+
+			// Validate the forum id.
+			$forum_id = bbp_get_forum_id( $forum_id );
+
+			// Maybe unsubscribe forum.
+			if ( in_array( $forum_id, $forum_subscriptions, true ) ) {
+				bbp_remove_user_forum_subscription( $user_id, $forum_id );
+				$retval = true;
+			}
+
+			// Get the forum's topics, and bail if there are none.
+			$topics = bbp_get_all_child_ids( $forum_id, bbp_get_topic_post_type() );
+			if ( empty( $topics ) ) {
+				continue;
+			}
+
+			// Get topic subscriptions to be removed, and unsubscribe.
+			$group_topics_subscribed = array_intersect( $topics, $topic_subscriptions );
+			foreach ( $group_topics_subscribed as $topic_id ) {
+				bbp_remove_user_topic_subscription( $user_id, $topic_id );
+				$retval = true;
+			}
+
+			// Get topic favorites to be removed, and unfavorite.
+			$group_topics_favorited = array_intersect( $topics, $topic_favorites );
+			foreach ( $group_topics_favorited as $topic_id ) {
+				bbp_remove_user_favorite( $user_id, $topic_id );
+				$retval = true;
+			}
+		}
+
+		return $retval;
+	}
+
 }
 endif;
diff --git tests/phpunit/testcases/extend/buddypress/groups/subscriptions.php tests/phpunit/testcases/extend/buddypress/groups/subscriptions.php
new file mode 100644
index 0000000..4cd3b61
--- /dev/null
+++ tests/phpunit/testcases/extend/buddypress/groups/subscriptions.php
@@ -0,0 +1,180 @@
+<?php
+
+/**
+ * @group extend
+ * @group buddypress
+ * @group groups
+ * @group subscriptions
+ */
+class BBP_Tests_Extend_BuddyPress_Groups_Subscriptions extends BBP_UnitTestCase {
+
+	protected $group_extension = null;
+	protected $old_current_filter = null;
+	protected $current_filter = null;
+	protected $group;
+	protected $group_id;
+
+	public function setUp() {
+		parent::setUp();
+
+		if ( ! function_exists( 'buddypress' ) ) {
+			return;
+		}
+
+		$this->group_extension = new BBP_Forums_Group_Extension;
+
+		$this->group_id = $this->bp_factory->group->create();
+		$this->group = groups_get_group( array( 'group_id' => $this->group_id ) );
+	}
+
+	public function tearDown() {
+		parent::tearDown();
+
+		$this->group_extension = null;
+	}
+
+	protected function set_current_filter( $filter = array() ) {
+		global $wp_current_filter;
+		$this->old_current_filter = $wp_current_filter;
+		$wp_current_filter[] = $filter;
+	}
+
+	protected function restore_current_filter() {
+		global $wp_current_filter;
+		$wp_current_filter = $this->old_current_filter;
+	}
+
+	/**
+	 * Copied from `BBP_Forums_Group_Extension::new_forum()`.
+	 */
+	private function attach_forum_to_group( $forum_id, $group_id ) {
+		bbp_add_forum_id_to_group( $group_id, $forum_id );
+		bbp_add_group_id_to_forum( $forum_id, $group_id );
+	}
+
+	/**
+	 * @covers BBP_Forums_Group_Extension::leave_group_unsubscribe
+	 */
+	public function test_leave_group_unsubscribe_when_user_banned_from_group() {
+
+		$old_current_user = get_current_user_id();
+		$u1 = $this->group->creator_id;
+		$u2 = $this->factory->user->create( array(
+			'user_login' => 'bbPress Groups User',
+			'user_pass'  => 'password',
+			'user_email' => 'bbp_user@example.org',
+		) );
+		wp_update_user( array( 'ID' => $u1, 'role' => 'administrator', ) );
+		BP_UnitTestCase::set_current_user( $u1 );
+		BP_UnitTestCase::add_user_to_group( $u2, $this->group_id );
+
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'post_author' => $u1,
+		) );
+		$this->attach_forum_to_group( $f, $this->group_id );
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+		bbp_add_user_favorite( $u2, $t );
+
+		$this->set_current_filter( 'groups_ban_member' );
+
+		$this->group_extension->leave_group_unsubscribe( $this->group_id, $u2 );
+
+		$this->assertFalse( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertFalse( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+		$this->assertFalse( bbp_is_user_favorite( $u2, $t ) );
+
+		$this->restore_current_filter();
+
+		// Restore old user
+		BP_UnitTestCase::set_current_user( $old_current_user );
+	}
+
+	/**
+	 * @covers BBP_Forums_Group_Extension::leave_group_unsubscribe
+	 */
+	public function test_leave_group_unsubscribe_when_user_removed_from_group() {
+
+		$old_current_user = get_current_user_id();
+		$u1 = $this->group->creator_id;
+		$u2 = $this->factory->user->create( array(
+			'user_login' => 'bbPress Groups User',
+			'user_pass'  => 'password',
+			'user_email' => 'bbp_user@example.org',
+		) );
+		wp_update_user( array( 'ID' => $u1, 'role' => 'administrator', ) );
+		BP_UnitTestCase::set_current_user( $u1 );
+		BP_UnitTestCase::add_user_to_group( $u2, $this->group_id );
+
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'post_author' => $u1,
+		) );
+		$this->attach_forum_to_group( $f, $this->group_id );
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+		bbp_add_user_favorite( $u2, $t );
+
+		$this->set_current_filter( 'groups_remove_member' );
+
+		$this->group_extension->leave_group_unsubscribe( $this->group_id, $u2 );
+
+		$this->assertFalse( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertFalse( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+		$this->assertFalse( bbp_is_user_favorite( $u2, $t ) );
+
+		$this->restore_current_filter();
+
+		// Restore old user
+		BP_UnitTestCase::set_current_user( $old_current_user );
+	}
+
+	/**
+	 * @covers BBP_Forums_Group_Extension::leave_group_unsubscribe
+	 */
+	public function test_leave_group_unsubscribe_when_user_leaves_group() {
+
+		// See https://buddypress.trac.wordpress.org/ticket/6597.
+		buddypress()->current_action = 'leave-group';
+
+		$old_current_user = get_current_user_id();
+		$u1 = $this->group->creator_id;
+		$u2 = $this->factory->user->create( array(
+			'user_login' => 'bbPress Groups User',
+			'user_pass'  => 'password',
+			'user_email' => 'bbp_user@example.org',
+		) );
+		BP_UnitTestCase::set_current_user( $u2 );
+		BP_UnitTestCase::add_user_to_group( $u2, $this->group_id );
+
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'post_author' => $u1,
+		) );
+		$this->attach_forum_to_group( $f, $this->group_id );
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+		bbp_add_user_favorite( $u2, $t );
+
+		$this->group_extension->leave_group_unsubscribe( $this->group_id, $u2 );
+
+		$this->assertFalse( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertFalse( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+		$this->assertFalse( bbp_is_user_favorite( $u2, $t ) );
+
+		$this->restore_current_filter();
+
+		// Reset BP current action
+		buddypress()->current_action = '';
+
+		// Restore old user
+		BP_UnitTestCase::set_current_user( $old_current_user );
+	}
+}
