Index: includes/topics/template-tags.php
===================================================================
--- includes/topics/template-tags.php	(revision 4519)
+++ includes/topics/template-tags.php	(working copy)
@@ -133,6 +133,8 @@
 	// Set post_parent back to 0 if originally set to 'any'
 	if ( 'any' == $r['post_parent'] )
 		$r['post_parent'] = $post_parent = 0;
+	else
+		$post_parent = $r['post_parent'];
 
 	// Limited the number of pages shown
 	if ( !empty( $r['max_num_pages'] ) )
Index: includes/topics/functions.php
===================================================================
--- includes/topics/functions.php	(revision 4519)
+++ includes/topics/functions.php	(working copy)
@@ -1663,10 +1663,10 @@
 function bbp_split_topic_count( $from_reply_id, $source_topic_id, $destination_topic_id ) {
 
 	// Forum Topic Counts
-	bbp_update_forum_topic_count( $destination_topic_id );
+	bbp_update_forum_topic_count( bbp_get_topic_forum_id( $destination_topic_id ) );
 
 	// Forum Reply Counts
-	bbp_update_forum_reply_count( $destination_topic_id );
+	bbp_update_forum_reply_count( bbp_get_topic_forum_id( $destination_topic_id ) );
 
 	// Topic Reply Counts
 	bbp_update_topic_reply_count( $source_topic_id      );
Index: includes/replies/template-tags.php
===================================================================
--- includes/replies/template-tags.php	(revision 4519)
+++ includes/replies/template-tags.php	(working copy)
@@ -1410,13 +1410,14 @@
 	 *  - after: HTML after the links. Defaults to '</span>'
 	 *  - sep: Separator. Defaults to ' | '
 	 *  - links: Array of the links to display. By default, edit, trash,
-	 *            spam and topic split links are displayed
+	 *            spam, reply move, and topic split links are displayed
 	 * @uses bbp_is_topic() To check if it's the topic page
 	 * @uses bbp_is_reply() To check if it's the reply page
 	 * @uses bbp_get_reply_id() To get the reply id
 	 * @uses bbp_get_reply_edit_link() To get the reply edit link
 	 * @uses bbp_get_reply_trash_link() To get the reply trash link
 	 * @uses bbp_get_reply_spam_link() To get the reply spam link
+	 * @uses bbp_get_reply_move_link() To get the reply move link
 	 * @uses bbp_get_topic_split_link() To get the topic split link
 	 * @uses current_user_can() To check if the current user can edit or
 	 *                           delete the reply
@@ -1457,6 +1458,7 @@
 		if ( empty( $r['links'] ) ) {
 			$r['links'] = array (
 				'edit'  => bbp_get_reply_edit_link ( $r ),
+				'move'  => bbp_get_reply_move_link ( $r ),
 				'split' => bbp_get_topic_split_link( $r ),
 				'trash' => bbp_get_reply_trash_link( $r ),
 				'spam'  => bbp_get_reply_spam_link ( $r ),
@@ -1739,9 +1741,77 @@
 	}
 
 /**
+ * Move reply link
+ *
+ * Output the move link of the reply
+ *
+ * @param mixed $args See {@link bbp_get_reply_move_link()}
+ * @uses bbp_get_reply_move_link() To get the reply move link
+ */
+function bbp_reply_move_link( $args = '' ) {
+	echo bbp_get_reply_move_link( $args );
+}
+
+	/**
+	 * Get move reply link
+	 *
+	 * Return the move link of the reply
+	 *
+	 * @param mixed $args This function supports these arguments:
+	 *  - id: Reply id
+	 *  - link_before: HTML before the link
+	 *  - link_after: HTML after the link
+	 *  - move_text: Move text
+	 *  - move_title: Move title attribute
+	 * @uses bbp_get_reply_id() To get the reply id
+	 * @uses bbp_get_reply() To get the reply
+	 * @uses current_user_can() To check if the current user can edit the
+	 *                           topic
+	 * @uses bbp_get_reply_topic_id() To get the reply topic id
+	 * @uses bbp_get_reply_edit_url() To get the reply edit url
+	 * @uses add_query_arg() To add custom args to the url
+	 * @uses wp_nonce_url() To nonce the url
+	 * @uses esc_url() To escape the url
+	 * @uses apply_filters() Calls 'bbp_get_reply_move_link' with the reply
+	 *                        move link and args
+	 * @return string Reply move link
+	 */
+	function bbp_get_reply_move_link( $args = '' ) {
+
+		// Parse arguments against default values
+		$r = bbp_parse_args( $args, array(
+			'id'          => 0,
+			'link_before' => '',
+			'link_after'  => '',
+			'split_text'  => __( 'Move',            'bbpress' ),
+			'split_title' => __( 'Move this reply', 'bbpress' )
+		), 'get_reply_move_link' );
+
+		$reply_id = bbp_get_reply_id( $r['id'] );
+		$topic_id = bbp_get_reply_topic_id( $reply_id );
+
+		if ( empty( $reply_id ) || !current_user_can( 'moderate', $topic_id ) )
+			return;
+
+		$uri = esc_url(
+			add_query_arg(
+				array(
+					'action'   => 'move',
+					'reply_id' => $reply_id
+				),
+			bbp_get_reply_edit_url( $reply_id )
+		) );
+
+		$retval = $r['link_before'] . '<a href="' . $uri . '" title="' . esc_attr( $r['split_title'] ) . '">' . esc_html( $r['split_text'] ) . '</a>' . $r['link_after'];
+
+		return apply_filters( 'bbp_get_reply_move_link', $retval, $r );
+	}
+
+
+/**
  * Split topic link
  *
- * Output the split link of the topic (but is bundled with each topic)
+ * Output the split link of the topic (but is bundled with each reply)
  *
  * @since bbPress (r2756)
  *
@@ -1776,7 +1846,7 @@
 	 * @uses esc_url() To escape the url
 	 * @uses apply_filters() Calls 'bbp_get_topic_split_link' with the topic
 	 *                        split link and args
-	 * @return string Reply spam link
+	 * @return string Topic split link
 	 */
 	function bbp_get_topic_split_link( $args = '' ) {
 
Index: includes/replies/functions.php
===================================================================
--- includes/replies/functions.php	(revision 4519)
+++ includes/replies/functions.php	(working copy)
@@ -1010,6 +1010,292 @@
 	return apply_filters( 'bbp_update_reply_revision_log', $revision_log, $r['reply_id'] );
 }
 
+/**
+ * Move reply handler
+ *
+ * Handles the front end move reply submission
+ *
+ * @uses bbPress:errors::add() To log various error messages
+ * @uses bbp_get_reply() To get the reply
+ * @uses bbp_get_topic() To get the topics
+ * @uses bbp_verify_nonce_request() To verify the nonce and check the request
+ * @uses current_user_can() To check if the current user can edit the reply and topics
+ * @uses bbp_get_topic_post_type() To get the topic post type
+ * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
+ * @uses do_action() Calls 'bbp_pre_move_reply' with the from reply id, source
+ *                    and destination topic ids
+ * @uses bbp_get_reply_post_type() To get the reply post type
+ * @uses wpdb::prepare() To prepare our sql query
+ * @uses wpdb::get_results() To execute the sql query and get results
+ * @uses wp_update_post() To update the replies
+ * @uses bbp_update_reply_topic_id() To update the reply topic id
+ * @uses bbp_get_topic_forum_id() To get the topic forum id
+ * @uses bbp_update_reply_forum_id() To update the reply forum id
+ * @uses do_action() Calls 'bbp_split_topic_reply' with the reply id and
+ *                    destination topic id
+ * @uses bbp_update_topic_last_reply_id() To update the topic last reply id
+ * @uses bbp_update_topic_last_active_time() To update the topic last active meta
+ * @uses do_action() Calls 'bbp_post_split_topic' with the destination and
+ *                    source topic ids and source topic's forum id
+ * @uses bbp_get_topic_permalink() To get the topic permalink
+ * @uses wp_safe_redirect() To redirect to the topic link
+ */
+function bbp_move_reply_handler() {
+
+	// Bail if not a POST action
+	if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
+		return;
+
+	// Bail if action is not 'bbp-move-reply'
+	if ( empty( $_POST['action'] ) || ( 'bbp-move-reply' !== $_POST['action'] ) )
+		return;
+
+	global $wpdb;
+
+	// Prevent debug notices
+	$move_reply_id = $destination_topic_id = 0;
+	$destination_topic_title = '';
+	$destination_topic = $move_reply = $source_topic = '';
+	$split_option = false;
+
+	/** Move Reply ***********************************************************/
+
+	if ( empty( $_POST['bbp_reply_id'] ) )
+		bbp_add_error( 'bbp_move_reply_reply_id', __( '<strong>ERROR</strong>: Reply ID to move not found!', 'bbpress' ) );
+	else
+		$move_reply_id = (int) $_POST['bbp_reply_id'];
+
+	$move_reply = bbp_get_reply( $move_reply_id );
+
+	// Reply exists
+	if ( empty( $move_reply ) )
+		bbp_add_error( 'bbp_mover_reply_r_not_found', __( '<strong>ERROR</strong>: The reply you want to move was not found.', 'bbpress' ) );
+
+	/** Topic to Move From ***************************************************/
+
+	// Get the reply's current topic
+	$source_topic = bbp_get_topic( $move_reply->post_parent );
+
+	// No topic
+	if ( empty( $source_topic ) )
+		bbp_add_error( 'bbp_move_reply_source_not_found', __( '<strong>ERROR</strong>: The topic you want to move from was not found.', 'bbpress' ) );
+
+	// Nonce check failed
+	if ( ! bbp_verify_nonce_request( 'bbp-move-reply_' . $move_reply->ID ) ) {
+		bbp_add_error( 'bbp_move_reply_nonce', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
+		return;
+	}
+
+	// Use cannot edit topic
+	if ( !current_user_can( 'edit_topic', $source_topic->ID ) )
+		bbp_add_error( 'bbp_move_reply_source_permission', __( '<strong>ERROR</strong>: You do not have the permissions to edit the source topic.', 'bbpress' ) );
+
+	// How to move
+	if ( !empty( $_POST['bbp_reply_move_option'] ) )
+		$move_option = (string) trim( $_POST['bbp_reply_move_option'] );
+
+	// Invalid move option
+	if ( empty( $move_option ) || !in_array( $move_option, array( 'existing', 'topic' ) ) ) {
+		bbp_add_error( 'bbp_move_reply_option', __( '<strong>ERROR</strong>: You need to choose a valid move option.', 'bbpress' ) );
+
+	// Valid move option
+	} else {
+
+		// What kind of move
+		switch ( $move_option ) {
+
+			// Into an existing topic
+			case 'existing' :
+
+				// Get destination topic id
+				if ( empty( $_POST['bbp_destination_topic'] ) )
+					bbp_add_error( 'bbp_move_reply_destination_id', __( '<strong>ERROR</strong>: Destination topic ID not found!', 'bbpress' ) );
+				else
+					$destination_topic_id = (int) $_POST['bbp_destination_topic'];
+
+				// Get the destination topic
+				$destination_topic = bbp_get_topic( $destination_topic_id );
+
+				// No destination topic
+				if ( empty( $destination_topic ) )
+					bbp_add_error( 'bbp_move_reply_destination_not_found', __( '<strong>ERROR</strong>: The topic you want to move to was not found!', 'bbpress' ) );
+
+				// User cannot edit the destination topic
+				if ( !current_user_can( 'edit_topic', $destination_topic->ID ) )
+					bbp_add_error( 'bbp_move_reply_destination_permission', __( '<strong>ERROR</strong>: You do not have the permissions to edit the destination topic!', 'bbpress' ) );
+
+				// Reply position
+				$reply_position = bbp_get_topic_reply_count( $destination_topic->ID ) + 1;
+
+				// New reply data
+				$postarr = array(
+					'ID'            => $move_reply->ID,
+					'post_title'    => sprintf( __( 'Reply To: %s', 'bbpress' ), $destination_topic->post_title ),
+					'post_name'     => false, // will be automatically generated
+					'post_parent'   => $destination_topic->ID,
+					'post_position' => $reply_position,
+					'guid'          => ''
+				);
+
+				// Update the reply
+				wp_update_post( $postarr );
+
+				// Adjust reply meta values
+				bbp_update_reply_topic_id( $move_reply->ID, $destination_topic->ID );
+				bbp_update_reply_forum_id( $move_reply->ID, bbp_get_topic_forum_id( $destination_topic->ID ) );
+
+				break;
+
+			// Move reply to a new topic
+			case 'topic' :
+			default :
+
+				// User needs to be able to publish topics
+				if ( current_user_can( 'publish_topics' ) ) {
+
+					// Use the new title that was passed
+					if ( !empty( $_POST['bbp_reply_move_destination_title'] ) ) {
+						$destination_topic_title = esc_attr( strip_tags( $_POST['bbp_reply_move_destination_title'] ) );
+
+					// Use the source topic title
+					} else {
+						$destination_topic_title = $source_topic->post_title;
+					}
+
+					// Setup the updated topic parameters
+					$postarr = array(
+						'ID'          => $move_reply->ID,
+						'post_title'  => $destination_topic_title,
+						'post_name'   => false,
+						'post_type'   => bbp_get_topic_post_type(),
+						'post_parent' => $source_topic->post_parent,
+						'guid'        => ''
+					);
+
+					// Update the topic
+					$destination_topic_id = wp_update_post( $postarr );
+					$destination_topic    = bbp_get_topic( $destination_topic_id );
+
+					// Make sure the new topic knows its a topic
+					bbp_update_topic_topic_id( $move_reply->ID );
+
+					// Shouldn't happen
+					if ( false == $destination_topic_id || is_wp_error( $destination_topic_id ) || empty( $destination_topic ) ) {
+						bbp_add_error( 'bbp_move_reply_destination_reply', __( '<strong>ERROR</strong>: There was a problem converting the reply into the topic. Please try again.', 'bbpress' ) );
+					}
+
+				// User cannot publish posts
+				} else {
+					bbp_add_error( 'bbp_move_reply_destination_permission', __( '<strong>ERROR</strong>: You do not have the permissions to create new topics. The reply could not be converted into a topic.', 'bbpress' ) );
+				}
+
+				break;
+		}
+	}
+
+	// Bail if there are errors
+	if ( bbp_has_errors() )
+		return;
+
+	/** No Errors - Clean Up **************************************************/
+
+	// Update counts, etc...
+	do_action( 'bbp_pre_move_reply', $move_reply->ID, $source_topic->ID, $destination_topic->ID );
+
+	/** Date Check ************************************************************/
+
+	// Check if the destination topic is older than the move reply
+	if ( strtotime( $move_reply->post_date ) < strtotime( $destination_topic->post_date ) ) {
+
+		// Set destination topic post_date to 1 second before from reply
+		$destination_post_date = date( 'Y-m-d H:i:s', strtotime( $move_reply->post_date ) - 1 );
+
+		$postarr = array(
+			'ID'            => $destination_topic_id,
+			'post_date'     => $destination_post_date,
+			'post_date_gmt' => get_gmt_from_date( $destination_post_date )
+		);
+	
+		// Update destination topic
+		wp_update_post( $postarr );
+	}
+	
+	// Set the last reply ID and freshness to the move_reply
+	$last_reply_id = $move_reply->ID;
+	$freshness     = $move_reply->post_date;
+	
+	// It is a new topic and we need to set some default metas to make
+	// the topic display in bbp_has_topics() list
+	if ( 'topic' == $move_option ) {
+		bbp_update_topic_last_reply_id   ( $destination_topic->ID, $last_reply_id );
+		bbp_update_topic_last_active_id  ( $destination_topic->ID, $last_reply_id );
+		bbp_update_topic_last_active_time( $destination_topic->ID, $freshness     );
+
+	// Otherwise update the existing destination topic
+	} else {
+		bbp_update_topic_last_reply_id   ( $destination_topic->ID );
+		bbp_update_topic_last_active_id  ( $destination_topic->ID );
+		bbp_update_topic_last_active_time( $destination_topic->ID );
+	}
+
+	// Update source topic ID last active
+	bbp_update_topic_last_reply_id   ( $source_topic->ID );
+	bbp_update_topic_last_active_id  ( $source_topic->ID );
+	bbp_update_topic_last_active_time( $source_topic->ID );
+	
+	/** Successful Move ******************************************************/
+
+	// Update counts, etc...
+	do_action( 'bbp_post_move_reply', $move_reply->ID, $source_topic->ID, $destination_topic->ID );
+
+	// Redirect back to the topic
+	wp_safe_redirect( bbp_get_topic_permalink( $destination_topic->ID ) );
+
+	// For good measure
+	exit();
+}
+
+/**
+ * Fix counts on reply move
+ *
+ * When a reply is moved, update the counts of source and destination topic
+ * and their forums.
+ *
+ * @param int $move_reply_id Move reply id
+ * @param int $source_topic_id Source topic id
+ * @param int $destination_topic_id Destination topic id
+ * @uses bbp_update_forum_topic_count() To update the forum topic counts
+ * @uses bbp_update_forum_reply_count() To update the forum reply counts
+ * @uses bbp_update_topic_reply_count() To update the topic reply counts
+ * @uses bbp_update_topic_voice_count() To update the topic voice counts
+ * @uses bbp_update_topic_reply_count_hidden() To update the topic hidden reply
+ *                                              count
+ * @uses do_action() Calls 'bbp_move_reply_count' with the move reply id,
+ *                    source topic id & destination topic id
+ */
+function bbp_move_reply_count( $move_reply_id, $source_topic_id, $destination_topic_id ) {
+
+	// Forum topic counts
+	bbp_update_forum_topic_count( bbp_get_topic_forum_id( $destination_topic_id ) );
+
+	// Forum reply counts
+	bbp_update_forum_reply_count( bbp_get_topic_forum_id( $destination_topic_id ) );
+
+	// Topic reply counts
+	bbp_update_topic_reply_count( $source_topic_id      );
+	bbp_update_topic_reply_count( $destination_topic_id );
+
+	// Topic hidden reply counts
+	bbp_update_topic_reply_count_hidden( $source_topic_id      );
+	bbp_update_topic_reply_count_hidden( $destination_topic_id );
+
+	// Topic voice counts
+	bbp_update_topic_voice_count( $source_topic_id      );
+	bbp_update_topic_voice_count( $destination_topic_id );
+
+	do_action( 'bbp_move_reply_count', $move_reply_id, $source_topic_id, $destination_topic_id );
+}
+
 /** Reply Actions *************************************************************/
 
 /**
Index: includes/common/template-tags.php
===================================================================
--- includes/common/template-tags.php	(revision 4519)
+++ includes/common/template-tags.php	(working copy)
@@ -479,6 +479,24 @@
 }
 
 /**
+ * Check if current page is a reply move page
+ *
+ * @uses bbp_is_reply_move() To check if it's a reply move page
+ * @return bool True if it's the reply move page, false if not
+ */
+function bbp_is_reply_move() {
+
+	// Assume false
+	$retval = false;
+
+	// Check reply edit and GET params
+	if ( bbp_is_reply_edit() && !empty( $_GET['action'] ) && ( 'move' == $_GET['action'] ) )
+		$retval = true;
+
+	return (bool) apply_filters( 'bbp_is_reply_move', $retval );
+}
+
+/**
  * Viewing a single reply
  *
  * @since bbPress (r3344)
@@ -800,7 +818,7 @@
  * @uses bbp_is_topic_split()
  * @uses bbp_is_single_reply()
  * @uses bbp_is_reply_edit()
- * @uses bbp_is_reply_edit()
+ * @uses bbp_is_reply_move()
  * @uses bbp_is_single_view()
  * @uses bbp_is_single_user_edit()
  * @uses bbp_is_single_user()
@@ -865,6 +883,9 @@
 
 	if ( bbp_is_reply_edit() )
 		$bbp_classes[] = bbp_get_reply_post_type() . '-edit';
+		
+	if ( bbp_is_reply_move() )
+		$bbp_classes[] = bbp_get_reply_post_type() . '-move';
 
 	if ( bbp_is_single_view() )
 		$bbp_classes[] = 'bbp-view';
@@ -937,7 +958,7 @@
  * @uses bbp_is_topic_split()
  * @uses bbp_is_single_reply()
  * @uses bbp_is_reply_edit()
- * @uses bbp_is_reply_edit()
+ * @uses bbp_is_reply_move()
  * @uses bbp_is_single_view()
  * @uses bbp_is_single_user_edit()
  * @uses bbp_is_single_user()
@@ -991,6 +1012,9 @@
 	elseif ( bbp_is_reply_edit() )
 		$retval = true;
 
+	elseif ( bbp_is_reply_move() )
+		$retval = true;
+
 	elseif ( bbp_is_single_view() )
 		$retval = true;
 
@@ -1550,7 +1574,7 @@
  *
  * @since bbPress (r2756)
  *
- * @uses wp_nonce_field() To generete a hidden nonce field
+ * @uses wp_nonce_field() To generate a hidden nonce field
  */
 function bbp_split_topic_form_fields() {
 ?>
@@ -1562,6 +1586,22 @@
 }
 
 /**
+ * Move reply form fields
+ *
+ * Output the required hidden fields when moving a reply
+ *
+ * @uses wp_nonce_field() To generate a hidden nonce field
+ */
+function bbp_move_reply_form_fields() {
+?>
+
+	<input type="hidden" name="action"       id="bbp_post_action" value="bbp-move-reply" />
+	<input type="hidden" name="bbp_reply_id" id="bbp_reply_id"    value="<?php echo absint( $_GET['reply_id'] ); ?>" />
+
+	<?php wp_nonce_field( 'bbp-move-reply_' . bbp_get_reply_id() );
+}
+
+/**
  * Output a textarea or TinyMCE if enabled
  *
  * @since bbPress (r3586)
Index: includes/core/template-loader.php
===================================================================
--- includes/core/template-loader.php	(revision 4519)
+++ includes/core/template-loader.php	(working copy)
@@ -38,6 +38,8 @@
  * @uses bbp_get_topic_split_template() To get topic split template
  * @uses bbp_is_topic_edit() To check if page is topic edit
  * @uses bbp_get_topic_edit_template() To get topic edit template
+ * @uses bbp_is_reply_move() To check if page is reply move
+ * @uses bbp_get_reply_move_template() To get reply move template
  * @uses bbp_is_reply_edit() To check if page is reply edit
  * @uses bbp_get_reply_edit_template() To get reply edit template
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
@@ -85,6 +87,9 @@
 	// Topic Archive
 	elseif ( bbp_is_topic_archive()    && ( $new_template = bbp_get_topic_archive_template()    ) ) :
 
+	// Reply move
+	elseif ( bbp_is_reply_move()       && ( $new_template = bbp_get_reply_move_template()       ) ) :
+
 	// Editing a reply
 	elseif ( bbp_is_reply_edit()       && ( $new_template = bbp_get_reply_edit_template()       ) ) :
 
@@ -406,6 +411,20 @@
 }
 
 /**
+ * Get the reply move template
+ *
+ * @uses bbp_get_reply_post_type()
+ * @uses bbp_get_query_template()
+ * @return string Path to template file
+ */
+function bbp_get_reply_move_template() {
+	$templates = array(
+		'single-' . bbp_get_reply_post_type() . '-move.php', // Reply move
+	);
+	return bbp_get_query_template( 'reply_move', $templates );
+}
+
+/**
  * Get the topic template
  *
  * @since bbPress (r3311)
Index: includes/core/actions.php
===================================================================
--- includes/core/actions.php	(revision 4519)
+++ includes/core/actions.php	(working copy)
@@ -203,6 +203,9 @@
 add_action( 'bbp_merged_topic',     'bbp_merge_topic_count', 1, 3 );
 add_action( 'bbp_post_split_topic', 'bbp_split_topic_count', 1, 3 );
 
+// Move Reply
+add_action( 'bbp_post_move_reply', 'bbp_move_reply_count', 1, 3 );
+
 // Before Delete/Trash/Untrash Topic
 add_action( 'wp_trash_post', 'bbp_trash_topic'   );
 add_action( 'trash_post',    'bbp_trash_topic'   );
@@ -281,6 +284,7 @@
 add_action( 'bbp_template_redirect', 'bbp_merge_topic_handler',     1  );
 add_action( 'bbp_template_redirect', 'bbp_split_topic_handler',     1  );
 add_action( 'bbp_template_redirect', 'bbp_toggle_topic_handler',    1  );
+add_action( 'bbp_template_redirect', 'bbp_move_reply_handler',      1  );
 add_action( 'bbp_template_redirect', 'bbp_toggle_reply_handler',    1  );
 add_action( 'bbp_template_redirect', 'bbp_favorites_handler',       1  );
 add_action( 'bbp_template_redirect', 'bbp_subscriptions_handler',   1  );
Index: includes/core/theme-compat.php
===================================================================
--- includes/core/theme-compat.php	(revision 4519)
+++ includes/core/theme-compat.php	(working copy)
@@ -443,6 +443,8 @@
  * @uses bbp_get_topic_split_template() To get topic split template
  * @uses bbp_is_topic_edit() To check if page is topic edit
  * @uses bbp_get_topic_edit_template() To get topic edit template
+ * @uses bbp_is_reply_move() To check if page is reply move
+ * @uses bbp_get_reply_move_template() To get reply move template
  * @uses bbp_is_reply_edit() To check if page is reply edit
  * @uses bbp_get_reply_edit_template() To get reply edit template
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
@@ -793,8 +795,22 @@
 
 	// Reply Edit
 	} elseif ( bbp_is_reply_edit() ) {
-		$new_content = $bbp->shortcodes->display_reply_form();
+	
+		// Move
+		if ( bbp_is_reply_move() ) {
+			ob_start();
 
+			bbp_get_template_part( 'form', 'reply-move' );
+
+			$new_content = ob_get_contents();
+
+			ob_end_clean();
+	
+		// Edit
+		} else {
+			$new_content = $bbp->shortcodes->display_reply_form();
+		}
+
 	// Single Reply
 	} elseif ( bbp_is_single_reply() ) {
 		$new_content = $bbp->shortcodes->display_reply( array( 'id' => get_the_ID() ) );
Index: includes/core/filters.php
===================================================================
--- includes/core/filters.php	(revision 4519)
+++ includes/core/filters.php	(working copy)
@@ -182,6 +182,7 @@
 add_filter( 'bbp_get_topicmerge_template',   'bbp_add_template_locations' );
 add_filter( 'bbp_get_topictag_template',     'bbp_add_template_locations' );
 add_filter( 'bbp_get_topictagedit_template', 'bbp_add_template_locations' );
+add_filter( 'bbp_get_replymove_template',    'bbp_add_template_locations' );
 
 /**
  * Add filters to anonymous post author data
Index: templates/default/bbpress/form-reply-move.php
===================================================================
--- templates/default/bbpress/form-reply-move.php	(revision 0)
+++ templates/default/bbpress/form-reply-move.php	(revision 0)
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * Move Reply
+ *
+ * @package bbPress
+ * @subpackage Theme
+ */
+
+?>
+
+<div id="bbpress-forums">
+
+	<?php bbp_breadcrumb(); ?>
+
+	<?php if ( is_user_logged_in() && current_user_can( 'edit_topic', bbp_get_topic_id() ) ) : ?>
+
+		<div id="move-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-move">
+
+			<form id="move_reply" name="move_reply" method="post" action="<?php the_permalink(); ?>">
+
+				<fieldset class="bbp-form">
+
+					<legend><?php printf( __( 'Move reply "%s"', 'bbpress' ), bbp_get_reply_title() ); ?></legend>
+
+					<div>
+
+						<div class="bbp-template-notice info">
+							<p><?php _e( 'When you move a reply, you can choose to use that reply as a new topic with a new title, or merge it into an existing topic.', 'bbpress' ); ?></p>
+						</div>
+
+						<div class="bbp-template-notice">
+							<p><?php _e( 'If you use the existing topic option, replies within both topics will be merged chronologically. The order of the merged reply is based on the time and date it was posted.', 'bbpress' ); ?></p>
+						</div>
+
+						<fieldset class="bbp-form">
+							<legend><?php _e( 'Move Method', 'bbpress' ); ?></legend>
+
+							<div>
+								<input name="bbp_reply_move_option" id="bbp_reply_move_option_reply" type="radio" checked="checked" value="topic" tabindex="<?php bbp_tab_index(); ?>" />
+								<label for="bbp_reply_move_option_reply"><?php printf( __( 'New topic in <strong>%s</strong> titled:', 'bbpress' ), bbp_get_forum_title( bbp_get_reply_forum_id( bbp_get_reply_id() ) ) ); ?></label>
+								<input type="text" id="bbp_reply_move_destination_title" value="<?php printf( __( 'Moved: %s', 'bbpress' ), bbp_get_reply_title() ); ?>" tabindex="<?php bbp_tab_index(); ?>" size="35" name="bbp_reply_move_destination_title" />
+							</div>
+
+							<?php if ( bbp_has_topics( array( 'show_stickies' => false, 'post_parent' => bbp_get_reply_forum_id( bbp_get_reply_id() ), 'post__not_in' => array( bbp_get_reply_topic_id( bbp_get_reply_id() ) ) ) ) ) : ?>
+
+								<div>
+									<input name="bbp_reply_move_option" id="bbp_reply_move_option_existing" type="radio" value="existing" tabindex="<?php bbp_tab_index(); ?>" />
+									<label for="bbp_reply_move_option_existing"><?php _e( 'Use an existing topic in this forum:', 'bbpress' ); ?></label>
+
+									<?php
+										bbp_dropdown( array(
+											'post_type'   => bbp_get_topic_post_type(),
+											'post_parent' => bbp_get_reply_forum_id( bbp_get_reply_id() ),
+											'selected'    => -1,
+											'exclude'     => bbp_get_reply_topic_id( bbp_get_reply_id() ),
+											'select_id'   => 'bbp_destination_topic',
+											'none_found'  => __( 'No other topics found!', 'bbpress' )
+										) );
+									?>
+
+								</div>
+
+							<?php endif; ?>
+
+						</fieldset>
+
+						<div class="bbp-template-notice error">
+							<p><?php _e( '<strong>WARNING:</strong> This process cannot be undone.', 'bbpress' ); ?></p>
+						</div>
+
+						<div class="bbp-submit-wrapper">
+							<button type="submit" tabindex="<?php bbp_tab_index(); ?>" id="bbp_move_reply_submit" name="bbp_move_reply_submit" class="button submit"><?php _e( 'Submit', 'bbpress' ); ?></button>
+						</div>
+					</div>
+
+					<?php bbp_move_reply_form_fields(); ?>
+
+				</fieldset>
+			</form>
+		</div>
+
+	<?php else : ?>
+
+		<div id="no-reply-<?php bbp_reply_id(); ?>" class="bbp-no-reply">
+			<div class="entry-content"><?php is_user_logged_in() ? _e( 'You do not have the permissions to edit this reply!', 'bbpress' ) : _e( 'You cannot edit this reply.', 'bbpress' ); ?></div>
+		</div>
+
+	<?php endif; ?>
+
+</div>
Index: templates/default/extras/single-reply-move.php
===================================================================
--- templates/default/extras/single-reply-move.php	(revision 0)
+++ templates/default/extras/single-reply-move.php	(revision 0)
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Move reply page
+ *
+ * @package bbPress
+ * @subpackage Theme
+ */
+
+get_header(); ?>
+
+	<?php do_action( 'bbp_before_main_content' ); ?>
+
+	<?php do_action( 'bbp_template_notices' ); ?>
+
+	<?php while ( have_posts() ) : the_post(); ?>
+
+		<div id="bbp-edit-page" class="bbp-edit-page">
+			<h1 class="entry-title"><?php the_title(); ?></h1>
+			<div class="entry-content">
+
+				<?php bbp_get_template_part( 'form', 'reply-move' ); ?>
+
+			</div>
+		</div><!-- #bbp-edit-page -->
+
+	<?php endwhile; ?>
+
+	<?php do_action( 'bbp_after_main_content' ); ?>
+
+<?php get_sidebar(); ?>
+<?php get_footer(); ?>
