Index: src/includes/common/functions.php
--- src/includes/common/functions.php
+++ src/includes/common/functions.php
@@ -188,6 +188,33 @@
 }

 /**
+ * Use the previous status when restoring a topic or reply.
+ *
+ * Fixes an issue since WordPress 5.6.0. See
+ * {@link https://bbpress.trac.wordpress.org/ticket/3433}.
+ *
+ * @since 2.6.10 bbPress (r7233)
+ *
+ * @param string $new_status      New status to use when untrashing. Default: 'draft'
+ * @param int    $post_id         Post ID
+ * @param string $previous_status Previous post status from '_wp_trash_meta_status' meta key. Default: 'pending'
+ */
+function bbp_fix_untrash_post_status( $new_status = 'draft', $post_id = 0, $previous_status = 'pending' ) {
+
+	// Bail if not Topic or Reply
+	if ( ! bbp_is_topic( $post_id ) && ! bbp_is_reply( $post_id ) ) {
+		return $new_status;
+	}
+
+	// Prefer the previous status, falling back to the new status
+	$retval = ! empty( $previous_status )
+		? $previous_status
+		: $new_status;
+
+	return $retval;
+}
+
+/**
  * Check a date against the length of time something can be edited.
  *
  * It is recommended to leave $utc set to true and to work with UTC/GMT dates.
Index: src/includes/core/filters.php
--- src/includes/core/filters.php
+++ src/includes/core/filters.php
@@ -52,6 +52,9 @@
 // Fix post author id for anonymous posts (set it back to 0) when the post status is changed
 add_filter( 'wp_insert_post_data', 'bbp_fix_post_author', 30, 2 );

+// Fix untrash post status after a topic or reply is re-instated
+add_filter( 'wp_untrash_post_status', 'bbp_fix_untrash_post_status', 10, 3 );
+
 // Force comments_status on bbPress post types
 add_filter( 'comments_open', 'bbp_force_comment_status' );

Index: src/readme.txt
--- src/readme.txt Base (BASE)
+++ src/readme.txt Locally Modified (Based On LOCAL)
Index: tests/phpunit/testcases/topics/functions/topic.php
--- tests/phpunit/testcases/topics/functions/topic.php
+++ tests/phpunit/testcases/topics/functions/topic.php
@@ -423,24 +423,51 @@

 	/**
 	 * @covers ::bbp_untrash_topic
-	 * @todo   Implement test_bbp_untrash_topic().
 	 */
 	public function test_bbp_untrash_topic() {
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete(
-			'This test has not been implemented yet.'
-		);
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'topic_meta' => array(
+				'forum_id' => $f,
+			),
+		) );
+
+		wp_trash_post( $t );
+
+		wp_untrash_post( $t );
+
+		$this->assertTrue( 'publish' === get_post_status( $t ) );
 	}

 	/**
 	 * @covers ::bbp_untrash_topic_replies
-	 * @todo   Implement test_bbp_untrash_topic_replies().
 	 */
 	public function test_bbp_untrash_topic_replies() {
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete(
-			'This test has not been implemented yet.'
-		);
+		$f = $this->factory->forum->create();
+		$t = $this->factory->topic->create( array(
+			'post_parent' => $f,
+			'topic_meta' => array(
+				'forum_id' => $f,
+			),
+		) );
+		$r = $this->factory->reply->create_many( 2, array(
+			'post_parent' => $t,
+			'reply_meta' => array(
+				'forum_id' => $f,
+				'topic_id' => $t,
+			),
+		) );
+
+		wp_trash_post( $t );
+
+		wp_untrash_post( $t );
+
+		$expected = [];
+		$expected[] = get_post_status( $r[0] );
+		$expected[] = get_post_status( $r[1] );
+
+		$this->assertSame( [ 'publish', 'publish' ], $expected );
 	}

 	/**
