diff --git src/includes/extend/buddypress/groups.php src/includes/extend/buddypress/groups.php
index c7b5167..57db56d 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'     ) );
+
+		// When a user is banned from a group, remove forum/topic subscriptions and favorites.
+		add_action( 'groups_ban_member',              array( $this, 'leave_group_unsubscribe' ), 10, 2  );
+
+		// When a user is removed from a group, remove forum/topic subscriptions and favorites.
+		add_action( 'groups_remove_member',           array( $this, 'leave_group_unsubscribe' ), 10, 2  );
+
+		// When a user leaves a group, remove forum/topic subscriptions and favorites.
+		add_action( 'groups_leave_group',             array( $this, 'leave_group_unsubscribe' ), 10, 2  );
 	}

 	/**
@@ -1505,5 +1514,151 @@ 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 x.x.x bbPress (rXXXX)
+	 *
+	 * @param int $group_id ID of the group.
+	 * @param int $user_id  The user whose subscriptions/favorites need to be deleted.
+	 *
+	 * @uses current_filter() To get the current action.
+	 * @uses bp_current_action() To get the current BP action.
+	 * @uses bbp_parse_args() Parse unfavorite/unsubscribe arguments.
+	 * @uses groups_get_group() To get the group.
+	 * @uses bbp_get_group_forum_ids() To get the group forum ids.
+	 * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscribed forum ids.
+	 * @uses bbp_get_user_subscribed_topic_ids() To get the user's subscribed topic ids.
+	 * @uses bbp_get_user_favorites_topic_ids() To get the user's favorited topic ids.
+	 * @uses bbp_remove_user_forum_subscription() To remove the user's forum subscription.
+	 * @uses bbp_get_topic_post_type() To get the topic post type.
+	 * @uses bbp_get_all_child_ids() To get the forum's child ids.
+	 * @uses bbp_remove_user_topic_subscription() To remove the user's topic subscription.
+	 * @uses bbp_remove_user_favorite() To remove the user's topic favorite.
+	 *
+	 * @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 #BP6597.
+		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';
+		}
+
+		// Set return value. Default to false.
+		$retval = false;
+
+		// By default, everything is unfavorited and unsubscribed when someone leaves,
+		// gets banned from, or removed from a group. All arguments are required, and
+		// are expected to have a value of true or false.
+		$defaults = array(
+			'leave' => array(
+				'hidden'  => true,
+				'private' => true,
+				'public'  => true,
+			),
+			'remove' => array(
+				'hidden'  => true,
+				'private' => true,
+				'public'  => true,
+			),
+			'ban' => array(
+				'hidden'  => true,
+				'private' => true,
+				'public'  => true,
+			),
+		);
+
+		// Parse our arguments. See `bbp_parse_args()` for filters.
+		$args = bbp_parse_args( array(), $defaults, 'group_unsubscribe'  );
+
+		// Get the group statuses we should update.
+		$statuses = array_keys( $args[ $action ], true, true );
+
+		// What is the group status?
+		$group_status = groups_get_group( array( 'group_id' => $group_id  ) )->status;
+
+		// If the group status isn't a status we should act upon, bail.
+		if ( ! in_array( $group_status, $statuses ) ) {
+			return false;
+		}
+
+		// Get the forum associated with the group. If there's 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;
+		}
+
+		// Loop over all of the forums to get all the topics.
+		foreach ( $forum_ids as $forum_id ) {
+
+			// Maybe unsubscribe forum.
+			if ( in_array( $forum_id, $forum_subscriptions ) ) {
+					bbp_remove_user_forum_subscription( $user_id, $forum_id );
+					$retval = true;
+			}
+
+			// Get the forum's topics.
+			$topics = bbp_get_all_child_ids( $forum_id, bbp_get_topic_post_type() );
+
+			// Get the intersection of child topics and the user's topic subscriptions.
+			$group_topics_subscribed = array_intersect( $topics, $topic_subscriptions );
+
+			// Maybe unsubscribe topics.
+			if ( ! empty( $group_topics_subscribed ) ) {
+				foreach ( $group_topics_subscribed as $topic_id ) {
+					bbp_remove_user_topic_subscription( $user_id, $topic_id );
+					$retval = true;
+				}
+			}
+
+			// Get the intersetion of child topics and the user's topic favorites.
+			$group_topics_favorited = array_intersect( $topics, $topic_favorites );
+
+			// Maybe unfavorite topics.
+			if ( ! empty( $group_topics_favorited ) ) {
+				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..3a5f292
--- /dev/null
+++ tests/phpunit/testcases/extend/buddypress/groups/subscriptions.php
@@ -0,0 +1,305 @@
+<?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( array( 'status' => 'public' ) );
+		$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() {
+		$this->group->status = 'public';
+		$this->group->save();
+
+		$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 );
+
+		$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->group->status = 'private';
+		$this->group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $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->group->status = 'hidden';
+		$this->group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+
+		add_filter( 'bbp_before_group_unsubscribe_parse_args', create_function( '', "
+			return array(
+				'leave' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+				'remove' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+				'ban' => array(
+					'hidden'  => false,
+					'private' => true,
+					'public'  => true,
+				),
+			);"
+		) );
+
+		$this->group_extension->leave_group_unsubscribe( $this->group_id, $u2 );
+
+		$this->restore_current_filter();
+
+		$this->assertTrue( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertTrue( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+
+		// 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() {
+		$this->group->status = 'public';
+		$this->group->save();
+
+		$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 );
+
+		$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->group->status = 'private';
+		$this->group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $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->group->status = 'hidden';
+		$this->group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+
+		add_filter( 'bbp_before_group_unsubscribe_parse_args', create_function( '', "
+			return array(
+				'leave' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+				'remove' => array(
+					'hidden'  => false,
+					'private' => true,
+					'public'  => true,
+				),
+				'ban' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+			);"
+		) );
+
+		$this->group_extension->leave_group_unsubscribe( $this->group_id, $u2 );
+
+		$this->restore_current_filter();
+
+		$this->assertTrue( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertTrue( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+
+		// 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 #BP6597.
+		buddypress()->current_action = 'leave-group';
+
+		$g = $this->bp_factory->group->create( array( 'status' => 'public' ) );
+		$group = groups_get_group( array( 'group_id' => $g ) );
+
+		$old_current_user = get_current_user_id();
+		$u1 = $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, $g );
+
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'post_author' => $u1,
+		) );
+		$this->attach_forum_to_group( $f, $g );
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+
+		$this->group_extension->leave_group_unsubscribe( $g, $u2 );
+
+		$this->assertFalse( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertFalse( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+
+		$group->status = 'private';
+		$group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+
+		$this->group_extension->leave_group_unsubscribe( $g, $u2 );
+
+		$this->assertFalse( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertFalse( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+
+		$group->status = 'hidden';
+		$group->save();
+
+		bbp_add_user_forum_subscription( $u2, $f );
+		bbp_add_user_topic_subscription( $u2, $t );
+
+		add_filter( 'bbp_before_group_unsubscribe_parse_args', create_function( '', "
+			return array(
+				'leave' => array(
+					'hidden'  => false,
+					'private' => true,
+					'public'  => true,
+				),
+				'remove' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+				'ban' => array(
+					'hidden'  => true,
+					'private' => true,
+					'public'  => true,
+				),
+			);"
+		) );
+
+		$this->group_extension->leave_group_unsubscribe( $g, $u2 );
+
+		$this->assertTrue( bbp_is_user_subscribed_to_forum( $u2, $f ) );
+		$this->assertTrue( bbp_is_user_subscribed_to_topic( $u2, $t ) );
+
+		// Reset BP current action
+		buddypress()->current_action = '';
+
+		// Restore old user
+		BP_UnitTestCase::set_current_user( $old_current_user );
+	}
+}
