Index: bb-templates/kakumei/style.css
===================================================================
--- bb-templates/kakumei/style.css	(revision 2389)
+++ bb-templates/kakumei/style.css	(working copy)
@@ -592,8 +592,11 @@
 
 .postform label { display: block; }
 
+.postform #author,
+.postform #email,
 .postform #topic,
-.postform #tags-input {
+.postform #tags-input,
+.postform #url {
 	margin: 5px 0;
 	padding: 5px;
 	width: 724px;
@@ -1008,4 +1011,4 @@
 
 p.submit input:active {
 	border-color: rgb(0, 100, 0);
-}
\ No newline at end of file
+}
Index: bb-templates/kakumei/post-form.php
===================================================================
--- bb-templates/kakumei/post-form.php	(revision 2389)
+++ bb-templates/kakumei/post-form.php	(working copy)
@@ -5,6 +5,29 @@
 	</label>
 </p>
 <?php endif; do_action( 'post_form_pre_post' ); ?>
+<?php if ( ! bb_is_user_logged_in() && ! bb_is_login_required() )  : 
+	$current_commenter = bb_get_current_commenter();
+?>
+	<p id="post-form-author-container">
+		<label for="author"><?php _e('Author (required)'); ?>
+			<input type="text" name="author" id="author" size="50" aria-required="true" value="<?php echo esc_attr($current_commenter['comment_author']); ?>" />
+		</label>
+	</p>
+
+	<p id="post-form-email-container">
+		<label for="email"><?php _e('Email (required)'); ?>
+			<input type="text" name="email" id="email" size="50" aria-required="true" value="<?php echo esc_attr($current_commenter['comment_author_email']); ?>" />
+		</label>
+	</p>
+
+	<p id="post-form-url-container">
+		<label for="url"><?php _e('URL'); ?>
+			<input type="text" name="url" id="url" size="50" aria-required="true" value="<?php echo esc_attr($current_commenter['comment_author_url']); ?>" />
+		</label>
+
+	</p>
+<?php endif; // end user not logged in but logins aren't required ?>
+
 <p id="post-form-post-container">
 	<label for="post_content"><?php _e('Post'); ?>
 		<textarea name="post_content" cols="50" rows="8" id="post_content" tabindex="3"></textarea>
Index: bb-includes/functions.bb-posts.php
===================================================================
--- bb-includes/functions.bb-posts.php	(revision 2389)
+++ bb-includes/functions.bb-posts.php	(working copy)
@@ -2,6 +2,62 @@
 
 /* Posts */
 
+/**
+ * Check to make sure that a user is not making too many posts in a short amount of time.
+ *
+ * @todo Add logic for users not logged in.
+ *
+ * @param string $ip Comment IP.
+ * @param string $email Comment author email address.
+ * @param string $date MySQL time string.
+ */
+function bb_check_comment_flood( $ip = '', $email = '', $date = '' ) {
+	global $bbdb;
+	$user_id = (int) $user_id;
+	$throttle_time = bb_get_option( 'throttle_time' );
+
+	if ( bb_current_user_can('manage_options') || empty( $throttle_time ) ) {
+		return;
+	}
+
+	$hour_ago = gmdate( 'Y-m-d H:i:s', time() - 3600 );
+
+	if ( bb_is_user_logged_in() ) {
+		$bb_current_user = bb_get_current_user();
+		
+		if ( isset($bb_current_user->data->last_posted) && time() < $bb_current_user->data->last_posted + $throttle_time && ! bb_current_user_can('throttle') ) {
+			if ( defined('DOING_AJAX') && DOING_AJAX ) {
+				die(__('Slow down; you move too fast.'));
+			} else {
+				bb_die(__('Slow down; you move too fast.'));
+			}
+		}
+	} else {
+		// todo: add logic for non-logged-in users
+	}
+}
+
+/**
+ * Get the current, non-logged-in commenter data.
+ * @return array The associative array of author, email, and url data.
+ */
+function bb_get_current_commenter() {
+	// Cookies should already be sanitized.
+	$comment_author = '';
+	if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) )
+		$comment_author = $_COOKIE['comment_author_'.COOKIEHASH];
+
+	$comment_author_email = '';
+	if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) )
+		$comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH];
+
+	$comment_author_url = '';
+	if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) )
+		$comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH];
+
+	return compact('comment_author', 'comment_author_email', 'comment_author_url');
+}
+
 function bb_get_post( $post_id ) {
 	global $bbdb;
 	$post_id = (int) $post_id;
@@ -300,10 +356,22 @@
 	$defaults['throttle'] = true;
 	extract( wp_parse_args( $args, $defaults ) );
 
+	if ( isset( $post_author ) ) {
+		$post_author = sanitize_user($post_author);
+	}
+
+	if ( isset( $post_email ) ) {
+		$post_email = sanitize_email($post_email);
+	}
+
+	if ( isset( $post_url ) ) {
+		$post_url = esc_url($post_url);
+	}
+
 	if ( !$topic = get_topic( $topic_id ) )
 		return false;
 
-	if ( !$user = bb_get_user( $poster_id ) )
+	if ( bb_is_login_required() && ! $user = bb_get_user( $poster_id ) )
 		return false;
 
 	$topic_id = (int) $topic->topic_id;
@@ -330,10 +398,17 @@
 		$bbdb->insert( $bbdb->posts, compact( $fields ) );
 		$post_id = $topic_last_post_id = (int) $bbdb->insert_id;
 
+		// if user not logged in, save user data as meta data
+		if ( ! bb_is_user_logged_in() && ! bb_is_login_required() ) {
+			bb_update_meta($post_id, 'post_author', $post_author, 'post');
+			bb_update_meta($post_id, 'post_email', $post_email, 'post');
+			bb_update_meta($post_id, 'post_url', $post_url, 'post');
+		}
+
 		if ( 0 == $post_status ) {
 			$topic_time = $post_time;
-			$topic_last_poster = $poster_id;
-			$topic_last_poster_name = $user->user_login;
+			$topic_last_poster = ( ! bb_is_user_logged_in() && ! bb_is_login_required() ) ? -1 : $poster_id;
+			$topic_last_poster_name = ( ! bb_is_user_logged_in() && ! bb_is_login_required() ) ? $post_author : $user->user_login;
 
 			$bbdb->query( $bbdb->prepare( "UPDATE $bbdb->forums SET posts = posts + 1 WHERE forum_id = %d;", $topic->forum_id ) );
 			$bbdb->update(
Index: bb-includes/functions.bb-template.php
===================================================================
--- bb-includes/functions.bb-template.php	(revision 2389)
+++ bb-includes/functions.bb-template.php	(working copy)
@@ -291,6 +291,7 @@
 	do_action( 'pre_post_form' );
 
 	if (
+		( false === bb_is_login_required() ) ||
 		( bb_is_topic() && bb_current_user_can( 'write_post', $topic->topic_id ) && ( $page == $last_page || !$last_page_only ) ) ||
 		( !bb_is_topic() && bb_current_user_can( 'write_topic', isset( $forum->forum_id ) ? $forum->forum_id : 0 ) )
 	) {
@@ -427,6 +428,14 @@
 	return 'forum-page' == bb_get_location();
 }
 
+/**
+ * Whether a user is required to log in in order to create posts and forums.
+ * @return bool Whether a user must be logged in.
+ */
+function bb_is_login_required() {
+	return ! (bool) bb_get_option('enable_loginless');
+}
+
 function bb_is_tags() {
 	return 'tag-page' == bb_get_location();
 }
@@ -1735,6 +1744,8 @@
 		return apply_filters( 'get_post_author', $user->display_name, $user->ID, $post_id );
 	elseif ( $title = bb_get_post_meta( 'pingback_title' ) )
 		return apply_filters( 'bb_get_pingback_title', $title, $post_id );
+	elseif ( $title = bb_get_post_meta( 'post_author' ) )
+		return apply_filters( 'get_post_author', $title, 0, $post_id );
 	else
 		return apply_filters( 'get_post_author', __('Anonymous'), 0, $post_id );
 }
@@ -1744,6 +1755,8 @@
 		echo '<a href="' . esc_attr( $link ) . '">' . get_post_author( $post_id ) . '</a>';
 	} elseif ( $link = bb_get_post_meta( 'pingback_uri' )) {
 		echo '<a href="' . esc_attr( $link ) . '">' . get_post_author( $post_id ) . '</a>';
+	} elseif ( $link = bb_get_post_meta( 'post_url' ) ) {
+		echo '<a href="' . esc_attr( $link ) . '">' . get_post_author( $post_id ) . '</a>';
 	} else {
 		post_author( $post_id );
 	}
Index: bb-includes/functions.bb-meta.php
===================================================================
--- bb-includes/functions.bb-meta.php	(revision 2389)
+++ bb-includes/functions.bb-meta.php	(working copy)
@@ -465,6 +465,7 @@
 		'wp_admin_cookie_path',
 		'wp_plugins_cookie_path',
 		'wordpress_mu_primary_blog_id',
+		'enable_loginless',
 		'enable_xmlrpc',
 		'enable_pingback',
 		'throttle_time',
Index: bb-post.php
===================================================================
--- bb-post.php	(revision 2389)
+++ bb-post.php	(working copy)
@@ -1,20 +1,41 @@
 <?php
 require('./bb-load.php');
 
-bb_auth('logged_in');
+if ( bb_is_login_required() ) {
+	bb_auth('logged_in');
+}
 
-if ( $throttle_time = bb_get_option( 'throttle_time' ) )
-	if ( isset($bb_current_user->data->last_posted) && time() < $bb_current_user->data->last_posted + $throttle_time && !bb_current_user_can('throttle') )
-		bb_die(__('Slow down; you move too fast.'));
+bb_check_comment_flood();
 
 if ( !$post_content = trim($_POST['post_content']) )
 	bb_die(__('You need to actually submit some content!'));
 
+$post_author = $post_email = $post_url = '';
+
+if ( ! bb_is_user_logged_in() ) {
+	if ( bb_is_login_required() ) {
+		bb_die(__('You are not allowed to post.  Are you logged in?'));
+	} else {
+		if ( ! $post_author = trim($_POST['author']) ) {
+			bb_die(__('You need to submit your name!'));
+		} elseif ( ! $post_email = trim($_POST['email']) ) {
+			bb_die(__('You need to submit your email!'));
+		}
+
+		if ( ! empty( $_POST['url'] ) ) {
+			$post_url = trim($_POST['url']);
+		}
+	}
+}
+
+
+
+
 if ( isset($_POST['topic']) && $forum_id = (int) $_POST['forum_id'] ) {
-	if ( !bb_current_user_can('write_posts') )
+	if ( bb_is_login_required() && ! bb_current_user_can('write_posts') )
 		bb_die(__('You are not allowed to post.  Are you logged in?'));
 
-	if ( !bb_current_user_can( 'write_topic', $forum_id ) )
+	if ( bb_is_login_required() && ! bb_current_user_can( 'write_topic', $forum_id ) )
 		bb_die(__('You are not allowed to write new topics.'));
 
 	bb_check_admin_referer( 'create-topic' );
@@ -32,14 +53,25 @@
 	bb_check_admin_referer( 'create-post_' . $topic_id );
 }
 
-if ( !bb_current_user_can( 'write_post', $topic_id ) )
+if ( bb_is_login_required() && ! bb_current_user_can( 'write_post', $topic_id ) )
 	bb_die(__('You are not allowed to post.  Are you logged in?'));
 
 if ( !topic_is_open( $topic_id ) )
 	bb_die(__('This topic has been closed'));
 
-$post_id = bb_new_post( $topic_id, $_POST['post_content'] );
+$post_data = array(
+	'post_text' => stripslashes($_POST['post_content']),
+	'topic_id' => $topic_id,
+);
 
+foreach( array('post_author', 'post_email', 'post_url') as $field ) {
+	if ( ! empty( $$field ) ) {
+		$post_data[$field] = $$field;
+	}
+}
+
+$post_id = bb_insert_post($post_data);
+
 $tags  = trim( $_POST['tags']  );
 bb_add_topic_tags( $topic_id, $tags );
 
Index: bb-admin/options-discussion.php
===================================================================
--- bb-admin/options-discussion.php	(revision 2389)
+++ bb-admin/options-discussion.php	(working copy)
@@ -10,6 +10,10 @@
 	if (!isset($_POST['enable_pingback'])) {
 		$_POST['enable_pingback'] = false;
 	}
+
+	if (!isset($_POST['enable_loginless'])) {
+		$_POST['enable_loginless'] = false;
+	}
 	
 	// Deal with avatars checkbox when it isn't checked
 	if (!isset($_POST['avatars_show'])) {
@@ -38,7 +42,7 @@
 	bb_admin_notice( __( '<strong>Settings saved.</strong>' ) );
 }
 
-$remote_options = array(
+$general_options = array(
 	'enable_pingback' => array(
 		'title' => __( 'Enable Pingbacks' ),
 		'type' => 'checkbox',
@@ -46,6 +50,14 @@
 			1 => __( 'Allow link notifications from other sites.' )
 		)
 	),
+
+	'enable_loginless' => array(
+		'title' => __( 'Enable Login-less Posting' ),
+		'type' => 'checkbox',
+		'options' => array(
+			1 => __( 'Allow users to create topics and posts without logging in.' )
+		),
+	),
 );
 
 $bb_get_option_avatars_show = create_function( '$a', 'return 1;' );
@@ -101,7 +113,7 @@
 <form class="settings" method="post" action="<?php bb_uri( 'bb-admin/options-discussion.php', null, BB_URI_CONTEXT_FORM_ACTION + BB_URI_CONTEXT_BB_ADMIN ); ?>">
 	<fieldset>
 <?php
-foreach ( $remote_options as $option => $args ) {
+foreach ( $general_options as $option => $args ) {
 	bb_option_form_element( $option, $args );
 }
 ?>
