Index: src/includes/common/functions.php
===================================================================
--- src/includes/common/functions.php
+++ src/includes/common/functions.php
@@ -271,6 +271,30 @@
 	return (int) apply_filters( 'bbp_get_trash_days', $days, $context );
 }
 
+/**
+ * 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.x bbPress (rXXX)
+ *
+ * @param string $retval          Current 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.
+ */
+function bbp_use_previous_status_for_untrash( $retval, $post_id, $previous_status ) {
+	if ( ! bbp_is_topic( $post_id ) && ! bbp_is_reply( $post_id ) ) {
+		return $retval;
+	}
+
+	if ( ! empty( $previous_status ) ) {
+		return $previous_status;
+	} else {
+		return $retval;
+	}
+}
+
 /** Statistics ****************************************************************/
 
 /**
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 status after a topic or reply is re-instated
+add_filter( 'wp_untrash_post_status', 'bbp_use_previous_status_for_untrash', 10, 3 );
+
 // Force comments_status on bbPress post types
 add_filter( 'comments_open', 'bbp_force_comment_status' );
 
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 );
 	}
 
 	/**
