Index: src/includes/topics/functions.php
===================================================================
--- src/includes/topics/functions.php	(revision 5444)
+++ src/includes/topics/functions.php	(working copy)
@@ -338,8 +338,17 @@
 
 	/** No Errors *************************************************************/
 
-	if ( ! empty( $topic_id ) && ! is_wp_error( $topic_id ) ) {
+	if ( !empty( $topic_id ) && !is_wp_error( $topic_id ) ) {
 
+		/** Close Check *******************************************************/
+
+		// If the topic is closed, close it properly
+		if ( ( get_post_field( 'post_status', $topic_id ) === bbp_get_closed_status_id() ) || ( $topic_data['post_status'] === bbp_get_closed_status_id() ) ) {
+
+			// Close the topic
+			bbp_close_topic( $topic_id );
+		}
+
 		/** Trash Check *******************************************************/
 
 		// If the forum is trash, or the topic_status is switched to
@@ -2758,8 +2767,13 @@
  *
  * @param int $topic_id Topic id
  * @uses bbp_get_topic() To get the topic
+ * @uses get_post_meta() To get the topic status meta
  * @uses do_action() Calls 'bbp_close_topic' with the topic id
  * @uses add_post_meta() To add the previous status to a meta
+ * @uses post_type_supports() To check if revisions are enabled
+ * @uses bbp_get_topic_post_type() To get the topic post type
+ * @uses remove_post_type_support() To temporarily remove topic revisions
+ * @uses add_post_type_support() To restore topic revisions
  * @uses wp_update_post() To update the topic with the new status
  * @uses do_action() Calls 'bbp_opened_topic' with the topic id
  * @return mixed False or {@link WP_Error} on failure, topic id on success
@@ -2772,26 +2786,41 @@
 		return $topic;
 	}
 
-	// Bail if already closed
-	if ( bbp_get_closed_status_id() === $topic->post_status ) {
+	// Get previous topic status meta
+	$topic_status = get_post_meta( $topic_id, '_bbp_status', true );
+
+	// Bail if already closed and topic status meta exists
+	if ( bbp_get_closed_status_id() === $topic->post_status && ! empty( $topic_status ) ) {
 		return false;
 	}
 
+	// Set status meta public
+	$topic_status = bbp_get_public_status_id();
+
 	// Execute pre close code
 	do_action( 'bbp_close_topic', $topic_id );
 
 	// Add pre close status
-	add_post_meta( $topic_id, '_bbp_status', $topic->post_status );
+	add_post_meta( $topic_id, '_bbp_status', $topic_status );
 
 	// Set closed status
 	$topic->post_status = bbp_get_closed_status_id();
 
-	// No revisions
-	remove_action( 'pre_post_update', 'wp_save_post_revision' );
+	// Toggle revisions off as we are not altering content
+	if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
+		$revisions_removed = true;
+		remove_post_type_support( bbp_get_topic_post_type(), 'revisions' );
+	}
 
 	// Update topic
 	$topic_id = wp_update_post( $topic );
 
+	// Toggle revisions back on
+	if ( true === $revisions_removed ) {
+		$revisions_removed = false;
+		add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
+	}
+
 	// Execute post close code
 	do_action( 'bbp_closed_topic', $topic_id );
 
