diff --git a/plugins/bbpress/includes/common/functions.php b/plugins/bbpress/includes/common/functions.php
index 7620d92..975bc2a 100644
--- a/plugins/bbpress/includes/common/functions.php
+++ b/plugins/bbpress/includes/common/functions.php
@@ -364,6 +364,96 @@
 }
 
 /**
+ * Fix post modified times on post save for topics/forums
+ *
+ * When a forum or topic is updated, the post_modified and post_modified_gmt
+ * fields are updated. Since these fields are used for freshness data, we
+ * don't want to stomp out the current data. This keeps the post_modified(_gmt)
+ * fields at their current status, and moves the last edit time (in GMT) to post
+ * meta as '_bbp_last_edit_time_gmt'. This also solves the problem of not being
+ * able to pass our own custom post_modified(_gmt) values
+ *
+ * @since bbPress (rXXXX)
+ *
+ * @param array $data Post data
+ * @param array $postarr Original post array data
+ * @uses bbp_get_topic_post_type() To get the topic post type
+ * @uses bbp_get_reply_post_type() To get the reply post type
+ * @uses bbp_is_post_request() To determine if we're in a POST request
+ * @uses update_post_meta() To update the '_bbp_last_edit_time_gmt' post meta field
+ * @return array Post data
+ */
+function bbp_fix_post_modified( $data = array(), $postarr = array() ) {
+
+	// Post is not being updated, return
+	if ( empty( $postarr['ID'] ) || ( empty( $postarr['post_modified'] ) && empty( $postarr['post_modified_gmt'] ) ) ) {
+		return $data;
+	}
+
+	// Post is not a forum or topic, return
+	if ( !in_array( $postarr['post_type'], array( bbp_get_forum_post_type(), bbp_get_topic_post_type() ) ) ) {
+		return $data;
+	}
+
+	// Are we editing?
+	if ( bbp_is_post_request() && in_array( $_POST['action'], array( 'bbp-edit-forum', 'bbp-edit-topic', 'editpost' ) ) ) {
+
+		// Set the last edited time in post meta to the new post_modified_gmt
+		update_post_meta( $postarr['ID'], '_bbp_last_edit_time_gmt', $data['post_modified_gmt'] );
+	}
+
+	// Reset post_modified and post_modified_gmt back to their original values
+	$data['post_modified']     = $postarr['post_modified'];
+	$data['post_modified_gmt'] = $postarr['post_modified_gmt'];
+
+	return $data;
+}
+
+/**
+ * Fix revision post_(date/date_gmt/modified/modified_gmt) times
+ *
+ * When a revision is created, _wp_post_revision_fields() sets the post_date(_gmt)
+ * fields to the post_modified time of the of the post being revised. Since we
+ * are now using the post_modified(_gmt) fields for freshness times, these fields
+ * are no longer accurate with respect to revisions. Here we reset the post_*
+ * times to back their proper values
+ *
+ * @since bbPress (rXXXX)
+ *
+ * @param array $data Post data
+ * @param array $postarr Original post array (includes post id)
+ * @uses bbp_is_topic() To make sure the revision is of a topic
+ * @uses get_post_meta() To get the '_bbp_last_edit_time_gmt' post meta field
+ * @uses get_date_from_gmt() To get the localized date from a gmt date
+ * @uses current_time() To get the current_time in mysql format
+ * @return array Post data
+ */
+function bbp_fix_revision_times( $data = array(), $postarr = array() ) {
+
+	// Don't even bother. This is not a revision or we're updating
+	if ( 'revision' !== $postarr['post_type'] || !empty( $postarr['ID'] ) ) {
+		return $data;
+	}
+
+	// Make sure we're working with a revision of a topic or forum
+	// TODO: Add a bbp_is_forum when forum revisions are added
+	if ( bbp_is_topic( $postarr['post_parent'] ) ) {
+		$post_id = $postarr['post_parent'];
+	}
+
+	// Get the true last edited time from post meta
+	$edit_time = get_post_meta( $post_id, '_bbp_last_edit_time_gmt', true );
+
+	// Reset post_modified and post_modified_gmt back to their original values
+	$data['post_date']         = get_date_from_gmt( $edit_time );
+	$data['post_date_gmt']     = $edit_time;
+	$data['post_modified']     = current_time( 'mysql'    );
+	$data['post_modified_gmt'] = current_time( 'mysql', 1 );
+
+	return $data;
+}
+
+/**
  * Check the date against the _bbp_edit_lock setting.
  *
  * @since bbPress (r3133)
diff --git a/plugins/bbpress/includes/common/widgets.php b/plugins/bbpress/includes/common/widgets.php
index 3204dc7..9866888 100644
--- a/plugins/bbpress/includes/common/widgets.php
+++ b/plugins/bbpress/includes/common/widgets.php
@@ -743,8 +743,7 @@
 					'post_status'         => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ),
 					'ignore_sticky_posts' => true,
 					'no_found_rows'       => true,
-					'meta_key'            => '_bbp_last_active_time',
-					'orderby'             => 'meta_value',
+					'orderby'             => 'modified',
 					'order'               => 'DESC',
 				);
 				break;
diff --git a/plugins/bbpress/includes/core/filters.php b/plugins/bbpress/includes/core/filters.php
index 8dcd42c..f7ff034 100644
--- a/plugins/bbpress/includes/core/filters.php
+++ b/plugins/bbpress/includes/core/filters.php
@@ -49,7 +49,13 @@
 add_filter( 'plugin_locale',           'bbp_plugin_locale',      10, 2 );
 
 // 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 );
+add_filter( 'wp_insert_post_data', 'bbp_fix_post_author',    30, 2 );
+
+// Fix post modified and post modified gmt time for forums and topics when the post is edited
+add_filter( 'wp_insert_post_data', 'bbp_fix_post_modified',  32, 2 );
+
+// Fix post revision times when topics and replies are edited
+add_filter( 'wp_insert_post_data', 'bbp_fix_revision_times', 34, 2 );
 
 // Force comments_status on bbPress post types
 add_filter( 'comments_open', 'bbp_force_comment_status' );
diff --git a/plugins/bbpress/includes/forums/functions.php b/plugins/bbpress/includes/forums/functions.php
index 050791d..9cbfe57 100644
--- a/plugins/bbpress/includes/forums/functions.php
+++ b/plugins/bbpress/includes/forums/functions.php
@@ -1171,8 +1171,7 @@
 		$post_vars = array(
 			'post_parent' => $forum_id,
 			'post_type'   => bbp_get_topic_post_type(),
-			'meta_key'    => '_bbp_last_active_time',
-			'orderby'     => 'meta_value',
+			'orderby'     => 'modified',
 			'numberposts' => 1
 		);
 
@@ -1326,16 +1325,17 @@
 }
 
 /**
- * Update the forums last active date/time (aka freshness)
+ * Update the forum's last active date/time (aka freshness)
  *
  * @since bbPress (r2680)
  *
- * @param int $forum_id Optional. Topic id
+ * @param int $forum_id Optional. Forum id
  * @param string $new_time Optional. New time in mysql format
  * @uses bbp_get_forum_id() To get the forum id
  * @uses bbp_get_forum_last_active_id() To get the forum's last post id
- * @uses get_post_field() To get the post date of the forum's last post
- * @uses update_post_meta() To update the forum last active time
+ * @uses get_post_field() To get the post_modified date of the forum
+ * @uses update_post_meta() To update the forum last active meta
+ * @uses wp_update_post() To update the post_modified date of the forum
  * @uses apply_filters() Calls 'bbp_update_forum_last_active' with the new time
  *                        and forum id
  * @return bool True on success, false on failure
@@ -1344,12 +1344,36 @@
 	$forum_id = bbp_get_forum_id( $forum_id );
 
 	// Check time and use current if empty
-	if ( empty( $new_time ) )
+	if ( empty( $new_time ) ) {
 		$new_time = get_post_field( 'post_date', bbp_get_forum_last_active_id( $forum_id ) );
+	}
 
 	// Update only if there is a time
-	if ( !empty( $new_time ) )
+	if ( !empty( $new_time ) ) {
+
+		// Update forum's meta - not used since 2.6
 		update_post_meta( $forum_id, '_bbp_last_active_time', $new_time );
+
+		// Toggle revisions to avoid duplicates
+		$revisions_removed = false;
+		if ( post_type_supports( bbp_get_forum_post_type(), 'revisions' ) ) {
+			$revisions_removed = true;
+			remove_post_type_support( bbp_get_forum_post_type(), 'revisions' );
+		}
+
+		// Update forum's post_modified date - since 2.6
+		wp_update_post( array(
+			'ID'                => $forum_id,
+			'post_modified'     => $new_time,
+			'post_modified_gmt' => get_gmt_from_date( $new_time )
+		) );
+
+		// Toggle revisions back on
+		if ( true === $revisions_removed ) {
+			$revisions_removed = false;
+			add_post_type_support( bbp_get_forum_post_type(), 'revisions' );
+		}
+	}
 
 	return (int) apply_filters( 'bbp_update_forum_last_active', $new_time, $forum_id );
 }
@@ -1906,8 +1930,8 @@
  * @return Position change based on sort
  */
 function _bbp_forum_query_usort_subforum_ids( $a = 0, $b = 0 ) {
-	$ta = get_post_meta( $a, '_bbp_last_active_time', true );
-	$tb = get_post_meta( $b, '_bbp_last_active_time', true );
+	$ta = get_post_field( 'post_modified', $a );
+	$tb = get_post_field( 'post_modified', $b );
 	return ( $ta < $tb ) ? -1 : 1;
 }
 
diff --git a/plugins/bbpress/includes/forums/template.php b/plugins/bbpress/includes/forums/template.php
index 890dbe0..0d65b5d 100644
--- a/plugins/bbpress/includes/forums/template.php
+++ b/plugins/bbpress/includes/forums/template.php
@@ -447,6 +447,7 @@
  * Allow forum rows to have adminstrative actions
  *
  * @since bbPress (r3653)
+ *
  * @uses do_action()
  * @todo Links and filter
  */
@@ -496,18 +497,13 @@
 	echo bbp_get_forum_last_active_time( $forum_id );
 }
 	/**
-	 * Return the forums last update date/time (aka freshness)
+	 * Return the forum's last update date/time (aka freshness)
 	 *
 	 * @since bbPress (r2464)
 	 *
 	 * @param int $forum_id Optional. Forum id
 	 * @uses bbp_get_forum_id() To get the forum id
-	 * @uses get_post_meta() To retrieve forum last active meta
-	 * @uses bbp_get_forum_last_reply_id() To get forum's last reply id
-	 * @uses get_post_field() To get the post date of the reply
-	 * @uses bbp_get_forum_last_topic_id() To get forum's last topic id
-	 * @uses bbp_get_topic_last_active_time() To get time when the topic was
-	 *                                    last active
+	 * @uses get_post_field() To get the post_modified of the forum
 	 * @uses bbp_convert_date() To convert the date
 	 * @uses bbp_get_time_since() To get time in since format
 	 * @uses apply_filters() Calls 'bbp_get_forum_last_active' with last
@@ -516,24 +512,14 @@
 	 */
 	function bbp_get_forum_last_active_time( $forum_id = 0 ) {
 
-		// Verify forum and get last active meta
+		// Verify forum and get last active time
 		$forum_id    = bbp_get_forum_id( $forum_id );
-		$last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
+		$last_active = get_post_field( 'post_modified', $forum_id );
 
-		if ( empty( $last_active ) ) {
-			$reply_id = bbp_get_forum_last_reply_id( $forum_id );
-			if ( !empty( $reply_id ) ) {
-				$last_active = get_post_field( 'post_date', $reply_id );
-			} else {
-				$topic_id = bbp_get_forum_last_topic_id( $forum_id );
-				if ( !empty( $topic_id ) ) {
-					$last_active = bbp_get_topic_last_active_time( $topic_id );
-				}
-			}
-		}
+		// Convert to time since format
+		$active_time = bbp_get_time_since( bbp_convert_date( $last_active ) );
 
-		$active_time = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
-
+		// Return the time since
 		return apply_filters( 'bbp_get_forum_last_active', $active_time, $forum_id );
 	}
 
@@ -2226,7 +2212,7 @@
 
 		return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
 	}
-	
+
 /**
  * Output checked value of forum subscription
  *
diff --git a/plugins/bbpress/includes/topics/functions.php b/plugins/bbpress/includes/topics/functions.php
index d097d22..8dad245 100644
--- a/plugins/bbpress/includes/topics/functions.php
+++ b/plugins/bbpress/includes/topics/functions.php
@@ -2497,16 +2497,26 @@
 }
 
 /**
- * Update the topics last active date/time (aka freshness)
+ * Update the topic's last active date/time (aka freshness)
  *
  * @since bbPress (r2680)
  *
  * @param int $topic_id Optional. Topic id
  * @param string $new_time Optional. New time in mysql format
- * @uses bbp_get_topic_id() To get the topic id
+ * @uses bbp_is_reply() To check if the id passed is a reply
  * @uses bbp_get_reply_topic_id() To get the reply topic id
- * @uses current_time() To get the current time
+ * @uses bbp_get_topic_id() To get the topic id
+ * @uses bbp_get_reply_post_type() To get the reply post type
+ * @uses bbp_get_public_child_last_id() To get the last public reply id
+ * @uses get_post_field() To get the post_modified date of the topic
  * @uses update_post_meta() To update the topic last active meta
+ * @uses bbp_get_reply_post_type() To get the topic post type
+ * @uses post_type_supports() To check if the them supports revisions
+ * @uses remove_post_type_support() To remove support for revisions
+ * @uses wp_update_post() To update the post_modified date of the topic
+ * @uses remove_post_type_support() To add support for revisions
+ * @uses apply_filters() Calls 'bbp_update_topic_last_active' with the new time
+ *                        and topic id
  * @return bool True on success, false on failure
  */
 function bbp_update_topic_last_active_time( $topic_id = 0, $new_time = '' ) {
@@ -2525,7 +2535,29 @@
 
 	// Update only if published
 	if ( !empty( $new_time ) ) {
+
+		// Update topic's meta - not used since 2.6
 		update_post_meta( $topic_id, '_bbp_last_active_time', $new_time );
+
+		// Toggle revisions to avoid duplicates
+		$revisions_removed = false;
+		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's post_modified date - since 2.6
+		wp_update_post( array(
+			'ID'                => $topic_id,
+			'post_modified'     => $new_time,
+			'post_modified_gmt' => get_gmt_from_date( $new_time )
+		) );
+
+		// Toggle revisions back on
+		if ( true === $revisions_removed ) {
+			$revisions_removed = false;
+			add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
+		}
 	}
 
 	return apply_filters( 'bbp_update_topic_last_active_time', $new_time, $topic_id );
@@ -3456,7 +3488,7 @@
 					<guid><?php bbp_topic_permalink(); ?></guid>
 					<title><![CDATA[<?php bbp_topic_title(); ?>]]></title>
 					<link><?php bbp_topic_permalink(); ?></link>
-					<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_meta( bbp_get_topic_id(), '_bbp_last_active_time', true ) ); ?></pubDate>
+					<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_field( 'post_modified', bbp_get_topic_id() ) ); ?></pubDate>
 					<dc:creator><?php the_author() ?></dc:creator>
 
 					<?php if ( !post_password_required() ) : ?>
diff --git a/plugins/bbpress/includes/topics/template.php b/plugins/bbpress/includes/topics/template.php
index 98fe48d..65da984 100644
--- a/plugins/bbpress/includes/topics/template.php
+++ b/plugins/bbpress/includes/topics/template.php
@@ -97,6 +97,7 @@
  * - New Style: Topics appear as "lead" posts, ahead of replies
  *
  * @since bbPress (r2954)
+ *
  * @param $show_lead Optional. Default false
  * @return bool Yes if the topic appears as a lead, otherwise false
  */
@@ -151,8 +152,7 @@
 	$default = array(
 		'post_type'      => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
 		'post_parent'    => $default_post_parent,      // Forum ID
-		'meta_key'       => '_bbp_last_active_time',   // Make sure topic has some last activity time
-		'orderby'        => 'meta_value',              // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
+		'orderby'        => 'modified',                // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
 		'order'          => 'DESC',                    // 'ASC', 'DESC'
 		'posts_per_page' => bbp_get_topics_per_page(), // Topics per page
 		'paged'          => bbp_get_paged(),           // Page Number
@@ -279,8 +279,7 @@
 				$sticky_query = array(
 					'post_type'   => bbp_get_topic_post_type(),
 					'post_parent' => 'any',
-					'meta_key'    => '_bbp_last_active_time',
-					'orderby'     => 'meta_value',
+					'orderby'     => 'modified',
 					'order'       => 'DESC',
 					'include'     => $stickies
 				);
@@ -1773,39 +1772,30 @@
 	echo bbp_get_topic_last_active_time( $topic_id );
 }
 	/**
-	 * Return the topics last update date/time (aka freshness)
+	 * Return the topic's last update date/time (aka freshness)
 	 *
 	 * @since bbPress (r2625)
 	 *
 	 * @param int $topic_id Optional. Topic id
 	 * @uses bbp_get_topic_id() To get topic id
-	 * @uses get_post_meta() To get the topic lst active meta
-	 * @uses bbp_get_topic_last_reply_id() To get topic last reply id
-	 * @uses get_post_field() To get the post date of topic/reply
-	 * @uses bbp_convert_date() To convert date
+	 * @uses get_post_field() To get the post_modified of the topic
+	 * @uses bbp_convert_date() To convert the date
 	 * @uses bbp_get_time_since() To get time in since format
 	 * @uses apply_filters() Calls 'bbp_get_topic_last_active' with topic
 	 *                        freshness and topic id
 	 * @return string Topic freshness
 	 */
 	function bbp_get_topic_last_active_time( $topic_id = 0 ) {
-		$topic_id = bbp_get_topic_id( $topic_id );
 
-		// Try to get the most accurate freshness time possible
-		$last_active = get_post_meta( $topic_id, '_bbp_last_active_time', true );
-		if ( empty( $last_active ) ) {
-			$reply_id = bbp_get_topic_last_reply_id( $topic_id );
-			if ( !empty( $reply_id ) ) {
-				$last_active = get_post_field( 'post_date', $reply_id );
-			} else {
-				$last_active = get_post_field( 'post_date', $topic_id );
-			}
-		}
+		// Verify forum and get last active time
+		$topic_id    = bbp_get_topic_id( $topic_id );
+		$last_active = get_post_field( 'post_modified', $topic_id );
 
-		$last_active = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
+		// Convert to time since format
+		$active_time = bbp_get_time_since( bbp_convert_date( $last_active ) );
 
 		// Return the time since
-		return apply_filters( 'bbp_get_topic_last_active', $last_active, $topic_id );
+		return apply_filters( 'bbp_get_topic_last_active', $active_time, $topic_id );
 	}
 
 /** Topic Subscriptions *******************************************************/
