Index: bbpress.php
--- bbpress.php
+++ bbpress.php
@@ -235,8 +235,9 @@
 		$this->favs_id           = apply_filters( 'bbp_favs_id',   'bbp_favs'   );
 		$this->subs_id           = apply_filters( 'bbp_subs_id',   'bbp_subs'   );
 		$this->view_id           = apply_filters( 'bbp_view_id',   'bbp_view'   );
-		$this->search_id         = apply_filters( 'bbp_search_id', 'bbp_search' );
 		$this->edit_id           = apply_filters( 'bbp_edit_id',   'edit'       );
+		$this->paged_id          = apply_filters( 'bbp_paged_id',  'paged'      );
+		$this->search_id         = apply_filters( 'bbp_search_id', 'bbp_search' );
 
 		/** Queries ***********************************************************/
 
@@ -369,7 +370,8 @@
 			'register_theme_packages',  // Register bundled theme packages (bbp-theme-compat/bbp-themes)
 			'load_textdomain',          // Load textdomain (bbpress)
 			'add_rewrite_tags',         // Add rewrite tags (view|user|edit|search)
-			'generate_rewrite_rules'    // Generate rewrite rules (view|edit|search)
+			'add_rewrite_rules',        // Generate rewrite rules (view|edit|paged|search)
+			'add_permastructs'          // Add permalink structures (view|user|search)
 		);
 
 		// Add the actions
@@ -854,101 +856,165 @@
 	 * @uses add_rewrite_tag() To add the rewrite tags
 	 */
 	public static function add_rewrite_tags() {
-		add_rewrite_tag( '%%' . bbp_get_view_rewrite_id()               . '%%', '([^/]+)'   ); // View Page tag
-		add_rewrite_tag( '%%' . bbp_get_edit_rewrite_id()               . '%%', '([1]{1,})' ); // Edit Page tag
-		add_rewrite_tag( '%%' . bbp_get_search_rewrite_id()             . '%%', '([^/]+)'   ); // Search Results tag
-		add_rewrite_tag( '%%' . bbp_get_user_rewrite_id()               . '%%', '([^/]+)'   ); // User Profile tag
-		add_rewrite_tag( '%%' . bbp_get_user_favorites_rewrite_id()     . '%%', '([1]{1,})' ); // User Favorites tag
-		add_rewrite_tag( '%%' . bbp_get_user_subscriptions_rewrite_id() . '%%', '([1]{1,})' ); // User Subscriptions tag
-		add_rewrite_tag( '%%' . bbp_get_user_topics_rewrite_id()        . '%%', '([1]{1,})' ); // User Topics Tag
-		add_rewrite_tag( '%%' . bbp_get_user_replies_rewrite_id()       . '%%', '([1]{1,})' ); // User Replies Tag
+
+		// Get the unique ID's
+		$edit_id      = 'edit';
+		$view_id      = bbp_get_view_rewrite_id();
+		$search_id    = bbp_get_search_rewrite_id();
+		$user_id      = bbp_get_user_rewrite_id();
+		$user_favs_id = bbp_get_user_favorites_rewrite_id();
+		$user_subs_id = bbp_get_user_subscriptions_rewrite_id();
+		$user_tops_id = bbp_get_user_topics_rewrite_id();
+		$user_reps_id = bbp_get_user_replies_rewrite_id();
+
+		// Setup the rewrite tags
+		add_rewrite_tag( '%' . $view_id      . '%', '([^/]+)'   ); // View Page tag
+		add_rewrite_tag( '%' . $edit_id      . '%', '([1]{1,})' ); // Edit Page tag
+		add_rewrite_tag( '%' . $search_id    . '%', '([^/]+)'   ); // Search Results tag
+		add_rewrite_tag( '%' . $user_id      . '%', '([^/]+)'   ); // User Profile tag
+		add_rewrite_tag( '%' . $user_favs_id . '%', '([1]{1,})' ); // User Favorites tag
+		add_rewrite_tag( '%' . $user_subs_id . '%', '([1]{1,})' ); // User Subscriptions tag
+		add_rewrite_tag( '%' . $user_tops_id . '%', '([1]{1,})' ); // User Topics Tag
+		add_rewrite_tag( '%' . $user_reps_id . '%', '([1]{1,})' ); // User Replies Tag
 	}
 
 	/**
-	 * Register bbPress-specific rewrite rules for uri's that are not
+	 * Add bbPress-specific rewrite rules for uri's that are not
 	 * setup for us by way of custom post types or taxonomies. This includes:
 	 * - Front-end editing
 	 * - Topic views
 	 * - User profiles
 	 *
 	 * @since bbPress (r2688)
-	 * @param WP_Rewrite $wp_rewrite bbPress-sepecific rules are appended in
-	 *                                $wp_rewrite->rules
 	 */
-	public static function generate_rewrite_rules( $wp_rewrite ) {
+	public static function add_rewrite_rules() {
 
-		// Slugs
-		$view_slug   = bbp_get_view_slug();
-		$search_slug = bbp_get_search_slug();
-		$user_slug   = bbp_get_user_slug();
+		// Single Slugs
+		$forum_slug         = bbp_get_forum_slug();
+		$topic_slug         = bbp_get_topic_slug();
+		$reply_slug         = bbp_get_reply_slug();
+		$ttag_slug          = bbp_get_topic_tag_tax_slug();
 
+		// Archive Slugs
+		$user_slug          = bbp_get_user_slug();
+		$view_slug          = bbp_get_view_slug();
+		$search_slug        = bbp_get_search_slug();
+		$topic_archive_slug = bbp_get_topic_archive_slug();
+		$reply_archive_slug = bbp_get_reply_archive_slug();
+
+		// Tertiary Slugs
+		$feed_slug          = 'feed';
+		$edit_slug          = 'edit';
+		$paged_slug         = bbp_get_paged_slug();
+		$user_favs_slug     = bbp_get_user_favorites_slug();
+		$user_subs_slug     = bbp_get_user_subscriptions_slug();
+
 		// Unique rewrite ID's
-		$edit_id     = bbp_get_edit_rewrite_id();
-		$view_id     = bbp_get_view_rewrite_id();
-		$search_id   = bbp_get_search_rewrite_id();
-		$user_id     = bbp_get_user_rewrite_id();
-		$favs_id     = bbp_get_user_favorites_rewrite_id();
-		$subs_id     = bbp_get_user_subscriptions_rewrite_id();
-		$tops_id     = bbp_get_user_topics_rewrite_id();
-		$reps_id     = bbp_get_user_replies_rewrite_id();
+		$feed_id            = 'feed';
+		$edit_id            = 'edit';
+		$view_id            = bbp_get_view_rewrite_id();
+		$paged_id           = bbp_get_paged_rewrite_id();
+		$search_id          = bbp_get_search_rewrite_id();
+		$user_id            = bbp_get_user_rewrite_id();
+		$user_favs_id       = bbp_get_user_favorites_rewrite_id();
+		$user_subs_id       = bbp_get_user_subscriptions_rewrite_id();
+		$user_tops_id       = bbp_get_user_topics_rewrite_id();
+		$user_reps_id       = bbp_get_user_replies_rewrite_id();
 
 		// Rewrite rule matches used repeatedly below
-		$root_rule   = '/([^/]+)/?$';
-		$edit_rule   = '/([^/]+)/edit/?$';
-		$feed_rule   = '/([^/]+)/feed/?$';
-		$page_rule   = '/([^/]+)/page/?([0-9]{1,})/?$';
+		$root_rule    = '/([^/]+)/?$';
+		$feed_rule    = '/([^/]+)/' . $feed_slug  . '/?$';
+		$edit_rule    = '/([^/]+)/' . $edit_slug  . '/?$';
+		$paged_rule   = '/([^/]+)/' . $paged_slug . '/?([0-9]{1,})/?$';
 
 		// Search rules (without slug check)
-		$search_root_rule = '/?$';
-		$search_page_rule = '/page/?([0-9]{1,})/?$';
+		$search_root_rule  = '/?$';
+		$search_paged_rule = '/' . $paged_slug . '/?([0-9]{1,})/?$';
 
 		// User profile rules
-		$tops_rule      = '/([^/]+)/topics/?$';
-		$reps_rule      = '/([^/]+)/replies/?$';
-		$favs_rule      = '/([^/]+)/' . bbp_get_user_favorites_slug()     . '/?$';
-		$subs_rule      = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/?$';
-		$tops_page_rule = '/([^/]+)/topics/page/?([0-9]{1,})/?$';
-		$reps_page_rule = '/([^/]+)/replies/page/?([0-9]{1,})/?$';
-		$favs_page_rule = '/([^/]+)/' . bbp_get_user_favorites_slug()     . '/page/?([0-9]{1,})/?$';
-		$subs_page_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/page/?([0-9]{1,})/?$';
+		$tops_rule       = '/([^/]+)/' . $topic_archive_slug . '/?$';
+		$reps_rule       = '/([^/]+)/' . $reply_archive_slug . '/?$';
+		$favs_rule       = '/([^/]+)/' . $user_favs_slug     . '/?$';
+		$subs_rule       = '/([^/]+)/' . $user_subs_slug     . '/?$';
+		$tops_paged_rule = '/([^/]+)/' . $topic_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$';
+		$reps_paged_rule = '/([^/]+)/' . $reply_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$';
+		$favs_paged_rule = '/([^/]+)/' . $user_favs_slug     . '/' . $paged_slug . '/?([0-9]{1,})/?$';
+		$subs_paged_rule = '/([^/]+)/' . $user_subs_slug     . '/' . $paged_slug . '/?([0-9]{1,})/?$';
 
-		// New bbPress specific rules to merge with existing that are not
-		// handled automatically by custom post types or taxonomy types
-		$bbp_rules = array(
+		/** Rewrite Rules *****************************************************/
 
-			// Edit Forum|Topic|Reply|Topic-tag
-			bbp_get_forum_slug()         . $edit_rule => 'index.php?' . bbp_get_forum_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
-			bbp_get_topic_slug()         . $edit_rule => 'index.php?' . bbp_get_topic_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
-			bbp_get_reply_slug()         . $edit_rule => 'index.php?' . bbp_get_reply_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
-			bbp_get_topic_tag_tax_slug() . $edit_rule => 'index.php?' . bbp_get_topic_tag_tax_id() . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
+		// Edit Forum|Topic|Reply|Topic-tag
+		add_rewrite_rule( $forum_slug . $edit_rule, 'index.php?' . bbp_get_forum_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
+		add_rewrite_rule( $topic_slug . $edit_rule, 'index.php?' . bbp_get_topic_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
+		add_rewrite_rule( $reply_slug . $edit_rule, 'index.php?' . bbp_get_reply_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
+		add_rewrite_rule( $ttag_slug  . $edit_rule, 'index.php?' . bbp_get_topic_tag_tax_id() . '=$matches[1]&' . $edit_id . '=1', 'top' );
 
-			// User Pagination|Edit|View
-			$user_slug . $tops_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $tops_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
-			$user_slug . $reps_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $reps_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
-			$user_slug . $favs_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $favs_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
-			$user_slug . $subs_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $subs_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
-			$user_slug . $tops_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $tops_id . '=1',
-			$user_slug . $reps_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $reps_id . '=1',
-			$user_slug . $favs_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $favs_id . '=1',
-			$user_slug . $subs_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $subs_id . '=1',
-			$user_slug . $edit_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
-			$user_slug . $root_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ),
+		// User Pagination|Edit|View
+		add_rewrite_rule( $user_slug . $tops_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_tops_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
+		add_rewrite_rule( $user_slug . $reps_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_reps_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
+		add_rewrite_rule( $user_slug . $favs_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_favs_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
+		add_rewrite_rule( $user_slug . $subs_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_subs_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
+		add_rewrite_rule( $user_slug . $tops_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_tops_id . '=1',                               'top' );
+		add_rewrite_rule( $user_slug . $reps_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_reps_id . '=1',                               'top' );
+		add_rewrite_rule( $user_slug . $favs_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_favs_id . '=1',                               'top' );
+		add_rewrite_rule( $user_slug . $subs_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_subs_id . '=1',                               'top' );
+		add_rewrite_rule( $user_slug . $edit_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $edit_id      . '=1',                               'top' );
+		add_rewrite_rule( $user_slug . $root_rule,       'index.php?' . $user_id  . '=$matches[1]',                                                       'top' );
 
-			// Topic-View Pagination|Feed|View
-			$view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
-			$view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&feed='  . $wp_rewrite->preg_index( 2 ),
-			$view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ),
+		// Topic-View Pagination|Feed|View
+		add_rewrite_rule( $view_slug . $paged_rule, 'index.php?' . $view_id . '=$matches[1]&' . $paged_id . '=$matches[2]', 'top' );
+		add_rewrite_rule( $view_slug . $feed_rule,  'index.php?' . $view_id . '=$matches[1]&' . $feed_id  . '=$matches[2]', 'top' );
+		add_rewrite_rule( $view_slug . $root_rule,  'index.php?' . $view_id . '=$matches[1]',                               'top' );
 
-			// Search All
-			$search_slug . $search_page_rule => 'index.php?paged=' . $wp_rewrite->preg_index( 1 ),
-			$search_slug . $search_root_rule => 'index.php?' . $search_id,
-		);
+		// Search All
+		add_rewrite_rule( $search_slug . $search_paged_rule, 'index.php?' . $paged_id .'=$matches[1]', 'top' );
+		add_rewrite_rule( $search_slug . $search_root_rule,  'index.php?' . $search_id,                'top' );
+	}
 
-		// Merge bbPress rules with existing
-		$wp_rewrite->rules = array_merge( $bbp_rules, $wp_rewrite->rules );
+	public function add_permastructs() {
 
-		// Return merged rules
-		return $wp_rewrite;
+		// Get unique ID's
+		$user_id     = bbp_get_user_rewrite_id();
+		$view_id     = bbp_get_view_rewrite_id();
+		$search_id   = bbp_get_search_rewrite_id();
+
+		// Get root slugs
+		$user_slug   = bbp_get_user_slug();
+		$view_slug   = bbp_get_view_slug();
+		$search_slug = bbp_get_search_slug();
+
+		// User Permastruct
+		add_permastruct( $user_id, $user_slug . '/%' . $user_id . '%', array(
+			'with_front'  => false,
+			'ep_mask'     => EP_NONE,
+			'paged'       => false,
+			'feed'        => false,
+			'forcomments' => false,
+			'walk_dirs'   => true,
+			'endpoints'   => true,
+		) );
+
+		// Topic View Permastruct
+		add_permastruct( $view_id, $view_slug . '/%' . $view_id . '%', array(
+			'with_front'  => false,
+			'ep_mask'     => EP_NONE,
+			'paged'       => false,
+			'feed'        => false,
+			'forcomments' => false,
+			'walk_dirs'   => true,
+			'endpoints'   => true,
+		) );
+
+		// Search Permastruct
+		add_permastruct( $user_id, $search_slug . '/%' . $search_id . '%', array(
+			'with_front'  => false,
+			'ep_mask'     => EP_NONE,
+			'paged'       => true,
+			'feed'        => false,
+			'forcomments' => false,
+			'walk_dirs'   => true,
+			'endpoints'   => true,
+		) );
 	}
 }
 
Index: includes/core/actions.php
--- includes/core/actions.php
+++ includes/core/actions.php
@@ -74,12 +74,14 @@
  *
  * Attach various initialization actions to the init action.
  * The load order helps to execute code at the correct time.
- *                                              v---Load order
+ *                                                    v---Load order
  */
-add_action( 'bbp_init', 'bbp_load_textdomain',  0   );
-add_action( 'bbp_init', 'bbp_register',         0   );
-add_action( 'bbp_init', 'bbp_add_rewrite_tags', 20  );
-add_action( 'bbp_init', 'bbp_ready',            999 );
+add_action( 'bbp_init', 'bbp_load_textdomain',   0   );
+add_action( 'bbp_init', 'bbp_register',          0   );
+add_action( 'bbp_init', 'bbp_add_rewrite_tags',  20  );
+add_action( 'bbp_init', 'bbp_add_rewrite_rules', 30  );
+add_action( 'bbp_init', 'bbp_add_permastructs',  40  );
+add_action( 'bbp_init', 'bbp_ready',             999 );
 
 /**
  * There is no action API for roles to use, so hook in immediately after
Index: includes/core/functions.php
--- includes/core/functions.php
+++ includes/core/functions.php
@@ -507,7 +507,31 @@
 	return bbpress()->view_id;
 }
 
+/** Rewrite Extras ************************************************************/
+
 /**
+ * Get the id used for paginated requests
+ *
+ * @since bbPress (rxxxx)
+ * @return string
+ */
+function bbp_get_paged_rewrite_id() {
+	return bbpress()->paged_id;
+}
+
+/**
+ * Get the slug used for paginated requests
+ *
+ * @since bbPress (rxxxx)
+ * @global object $wp_rewrite The WP_Rewrite object
+ * @return string
+ */
+function bbp_get_paged_slug() {
+	global $wp_rewrite;
+	return $wp_rewrite->pagination_base;
+}
+
+/**
  * Delete a blogs rewrite rules, so that they are automatically rebuilt on
  * the subsequent page load.
  *
Index: includes/core/options.php
--- includes/core/options.php
+++ includes/core/options.php
@@ -61,6 +61,7 @@
 
 		'_bbp_root_slug'            => 'forums',    // Forum archive slug
 		'_bbp_topic_archive_slug'   => 'topics',    // Topic archive slug
+		'_bbp_reply_archive_slug'   => 'replies',   // Reply archive slug
 
 		/** Single Slugs ******************************************************/
 
@@ -431,6 +432,16 @@
 }
 
 /**
+ * Return the reply archive slug
+ *
+ * @since bbPress (rxxxx)
+ * @return string
+ */
+function bbp_get_reply_archive_slug( $default = 'replies' ) {
+	return apply_filters( 'bbp_get_reply_archive_slug', get_option( '_bbp_reply_archive_slug', $default ) );
+}
+
+/**
  * Return the single topic slug
  *
  * @since bbPress (r3759)
Index: includes/core/sub-actions.php
--- includes/core/sub-actions.php
+++ includes/core/sub-actions.php
@@ -233,6 +233,26 @@
 }
 
 /**
+ * Add the bbPress-specific rewrite rules
+ *
+ * @since bbPress (rxxxx)
+ * @uses do_action() Calls 'bbp_add_rewrite_rules'
+ */
+function bbp_add_rewrite_rules() {
+	do_action( 'bbp_add_rewrite_rules' );
+}
+
+/**
+ * Add the bbPress-specific permalink structures
+ *
+ * @since bbPress (rxxxx)
+ * @uses do_action() Calls 'bbp_add_permastructs'
+ */
+function bbp_add_permastructs() {
+	do_action( 'bbp_add_permastructs' );
+}
+
+/**
  * Add the bbPress-specific login forum action
  *
  * @since bbPress (r2753)
@@ -405,6 +425,7 @@
  * Generate bbPress-specific rewrite rules
  *
  * @since bbPress (r2688)
+ * @deprecated since bbPress (rxxxx)
  * @param WP_Rewrite $wp_rewrite
  * @uses do_action() Calls 'bbp_generate_rewrite_rules' with {@link WP_Rewrite}
  */
