Index: trunk/src/includes/replies/functions.php
===================================================================
--- trunk/src/includes/replies/functions.php	(revision 7075)
+++ trunk/src/includes/replies/functions.php	(working copy)
@@ -543,6 +543,9 @@
 
 			// Filter anonymous data
 			$anonymous_data = bbp_filter_anonymous_post_data();
+
+			// Anonymous data checks out, so set cookies, etc...
+			bbp_set_current_anonymous_user_data( $anonymous_data );
 		}
 	}
 
@@ -2227,13 +2230,13 @@
  */
 function bbp_check_reply_edit() {
 
-	// Bail if not editing a topic
+	// Bail if not editing a reply
 	if ( ! bbp_is_reply_edit() ) {
 		return;
 	}
 
-	// User cannot edit topic, so redirect back to reply
-	if ( ! current_user_can( 'edit_reply', bbp_get_reply_id() ) ) {
+	// User cannot edit reply, so redirect back to reply
+	if ( ! current_user_can( 'edit_reply', bbp_get_reply_id() ) && ! bbp_anonymous_user_can( 'edit_reply', bbp_get_reply_id() ) ) {
 		bbp_redirect( bbp_get_reply_url() );
 	}
 }
Index: trunk/src/includes/replies/template.php
===================================================================
--- trunk/src/includes/replies/template.php	(revision 7075)
+++ trunk/src/includes/replies/template.php	(working copy)
@@ -1855,7 +1855,7 @@
 		if ( ! current_user_can( 'edit_others_replies' ) ) {
 
 			// User cannot edit or it is past the lock time
-			if ( empty( $reply ) || ! current_user_can( 'edit_reply', $reply->ID ) || bbp_past_edit_lock( $reply->post_date_gmt ) ) {
+			if ( empty( $reply ) || (! current_user_can( 'edit_reply', $reply->ID ) && ! bbp_anonymous_user_can( 'edit_reply', $reply->ID ) ) || bbp_past_edit_lock( $reply->post_date_gmt ) ) {
 				return;
 			}
 		}
Index: trunk/src/includes/topics/functions.php
===================================================================
--- trunk/src/includes/topics/functions.php	(revision 7075)
+++ trunk/src/includes/topics/functions.php	(working copy)
@@ -460,6 +460,9 @@
 
 			// Filter anonymous data
 			$anonymous_data = bbp_filter_anonymous_post_data();
+
+			// Anonymous data checks out, so set cookies, etc...
+			bbp_set_current_anonymous_user_data( $anonymous_data );
 		}
 	}
 
@@ -3838,7 +3841,7 @@
 	}
 
 	// User cannot edit topic, so redirect back to topic
-	if ( ! current_user_can( 'edit_topic', bbp_get_topic_id() ) ) {
+	if ( ! current_user_can( 'edit_topic', bbp_get_topic_id() ) && ! bbp_anonymous_user_can( 'edit_topic', bbp_get_topic_id() ) ) {
 		bbp_redirect( bbp_get_topic_permalink() );
 	}
 }
Index: trunk/src/includes/topics/template.php
===================================================================
--- trunk/src/includes/topics/template.php	(revision 7075)
+++ trunk/src/includes/topics/template.php	(working copy)
@@ -2410,7 +2410,7 @@
 		if ( ! current_user_can( 'edit_others_topics' ) ) {
 
 			// User cannot edit or it is past the lock time
-			if ( empty( $topic ) || ! current_user_can( 'edit_topic', $topic->ID ) || bbp_past_edit_lock( $topic->post_date_gmt ) ) {
+			if ( empty( $topic ) || (! current_user_can( 'edit_topic', $topic->ID ) && ! bbp_anonymous_user_can( 'edit_topic', $topic->ID ) ) || bbp_past_edit_lock( $topic->post_date_gmt ) ) {
 				return;
 			}
 		}
Index: trunk/src/includes/users/capabilities.php
===================================================================
--- trunk/src/includes/users/capabilities.php	(revision 7075)
+++ trunk/src/includes/users/capabilities.php	(working copy)
@@ -826,3 +826,40 @@
 	// Filter & return
 	return (array) apply_filters( 'bbp_get_moderators', $users, $object_id, $object_type );
 }
+
+function bbp_anonymous_user_can( $capability, ...$args ) {
+
+	switch ( $capability ) {
+
+		default:
+			return false;
+
+		case 'edit_topic':
+		case 'edit_reply':
+
+			$post_id = $args[0];
+			$post = ( 'edit_topic' == $capability ) ? bbp_get_topic( $post_id ) : bbp_get_reply( $post_id );
+
+			if ( empty( $post ) ) {
+				return false;
+			}
+			
+			if ( $post->post_author ) {
+				return false;
+			}
+
+			$current_user = wp_get_current_user();
+
+			if ( $current_user->ID ) {
+				return false;
+			}
+
+			$anonymous_data = wp_get_current_commenter();
+
+			$retval = $anonymous_data['comment_author']       == get_post_meta( $post_id, '_bbp_anonymous_name',    true ) &&
+					  $anonymous_data['comment_author_email'] == get_post_meta( $post_id, '_bbp_anonymous_email',   true ) &&
+					  $anonymous_data['comment_author_url']   == get_post_meta( $post_id, '_bbp_anonymous_website', true );
+
+			return $retval;
+	}
+}
