Index: bbp-includes/bbp-general-template.php
===================================================================
--- bbp-includes/bbp-general-template.php	(revision 2824)
+++ bbp-includes/bbp-general-template.php	(working copy)
@@ -323,7 +323,7 @@
  *
  * @since bbPress (r2815)
  *
- * @param str $url Pass a URL to redirect to
+ * @param string $url Pass a URL to redirect to
  * @uses add_query_arg() To add a arg to the url
  * @uses site_url() Toget the site url
  * @uses apply_filters() Calls 'bbp_wp_login_action' with the url and args
@@ -1061,4 +1061,32 @@
 <?php endif;
 }
 
+/** Login/logout/register/lost pass *******************************************/
+
+/**
+ * Output the logout link
+ *
+ * @since bbPress (r)
+ *
+ * @param string $redirect_to Redirect to url
+ * @uses bbp_get_logout_link() To get the logout link
+ */
+function bbp_logout_link( $redirect_to = '' ) {
+	echo bbp_get_logout_link( $redirect_to );
+}
+	/**
+	 * Return the logout link
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @param string $redirect_to Redirect to url
+	 * @uses wp_logout_url() To get the logout url
+	 * @uses apply_filters() Calls 'bbp_get_logout_link' with the logout link and
+	 *                        redirect to url
+	 * @return string The logout link
+	 */
+	function bbp_get_logout_link( $redirect_to = '' ) {
+		return apply_filters( 'bbp_get_logout_link', '<a href="' . wp_logout_url() . '">' . __( 'Logout', 'bbpress' ) . '</a>', $redirect_to );
+	}
+
 ?>
Index: bbp-includes/bbp-hooks.php
===================================================================
--- bbp-includes/bbp-hooks.php	(revision 2824)
+++ bbp-includes/bbp-hooks.php	(working copy)
@@ -68,6 +68,7 @@
 }
 
 // Widgets
+add_action( 'widgets_init', create_function( '', 'return register_widget("BBP_Login_Widget");'   ) );
 add_action( 'widgets_init', create_function( '', 'return register_widget("BBP_Forums_Widget");'  ) );
 add_action( 'widgets_init', create_function( '', 'return register_widget("BBP_Topics_Widget");'  ) );
 add_action( 'widgets_init', create_function( '', 'return register_widget("BBP_Replies_Widget");' ) );
Index: bbp-includes/bbp-user-template.php
===================================================================
--- bbp-includes/bbp-user-template.php	(revision 2824)
+++ bbp-includes/bbp-user-template.php	(working copy)
@@ -363,6 +363,47 @@
 
 	}
 
+/**
+ * Output the link to the admin section
+ *
+ * @since bbPress (r)
+ *
+ * @param mixed $args Optional. See {@link bbp_get_admin_link()}
+ * @uses bbp_get_admin_link() To get the admin link
+ */
+function bbp_admin_link( $args = '' ) {
+	echo bbp_get_admin_link( $args );
+}
+	/**
+	 * Return the link to the admin section
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @param mixed $args Optional. This function supports these arguments:
+	 *  - text: The text
+	 *  - before: Before the lnk
+	 *  - after: After the link
+	 * @uses current_user_can() To check if the current user can moderate
+	 * @uses admin_url() To get the admin url
+	 * @uses apply_filters() Calls 'bbp_get_admin_link' with the link & args
+	 * @return The link
+	 */
+	function bbp_get_admin_link( $args = '' ) {
+		if ( !current_user_can( 'moderate' ) )
+			return;
+
+		if ( $args && is_string( $args ) && false === strpos( $args, '=' ) )
+			$args = array( 'text' => $args );
+
+		$defaults = array( 'text' => __( 'Admin', 'bbpress' ), 'before' => '', 'after' => '' );
+		$args     = wp_parse_args( $args, $defaults );
+		extract( $args, EXTR_SKIP );
+
+		$uri = admin_url();
+
+		return apply_filters( 'bbp_get_admin_link', $before . '<a href="' . $uri . '">' . $text . '</a>' . $after, $args );
+	}
+
 /** Favorites *****************************************************************/
 
 /**
@@ -742,11 +783,12 @@
  * @uses bbp_get_current_user_id() To get the current user id
  */
 function bbp_logged_in_redirect( $url = '' ) {
-	if ( is_user_logged_in() ) {
-		$redirect_to = !empty( $url ) ? $url : bbp_get_user_profile_url( bbp_get_current_user_id() );
-		wp_safe_redirect( $redirect_to );
-		exit;
-	}
+	if ( !is_user_logged_in() )
+		return;
+
+	$redirect_to = !empty( $url ) ? $url : bbp_get_user_profile_url( bbp_get_current_user_id() );
+	wp_safe_redirect( $redirect_to );
+	exit;
 }
 
 /**
Index: bbp-includes/bbp-widgets.php
===================================================================
--- bbp-includes/bbp-widgets.php	(revision 2824)
+++ bbp-includes/bbp-widgets.php	(working copy)
@@ -3,11 +3,102 @@
 /**
  * bbPress Widgets
  *
+ * Contains the forum list, topic list, reply list and login form widgets.
+ *
  * @package bbPress
  * @subpackage Widgets
  */
 
 /**
+ * bbPress Login Widget
+ *
+ * Adds a widget which displays the login form
+ *
+ * @since bbPress (r)
+ *
+ * @uses WP_Widget
+ */
+class BBP_Login_Widget extends WP_Widget {
+
+	/**
+	 * bbPress Login Widget
+	 *
+	 * Registers the login widget
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @uses apply_filters() Calls 'bbp_login_widget_options' with the
+	 *                        widget options
+	 */
+	function BBP_Login_Widget() {
+		$widget_ops = apply_filters( 'bbp_login_widget_options', array(
+			'classname'   => 'widget_display_forums',
+			'description' => __( 'The login widget.', 'bbpress' )
+		) );
+
+		parent::WP_Widget( false, __( 'bbPress Login Widget', 'bbpress' ), $widget_ops );
+	}
+
+	/**
+	 * Displays the output, the login form
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @param mixed $args Arguments
+	 * @param array $instance Instance
+	 * @uses apply_filters() Calls 'bbp_login_widget_title' with the title
+	 * @uses get_template_part() To get the login/logged in form
+	 */
+	function widget( $args, $instance ) {
+		extract( $args );
+
+		$title = apply_filters( 'bbp_login_widget_title', $instance['title'] );
+
+		echo $before_widget;
+		echo $before_title . $title . $after_title;
+
+		get_template_part( 'form', is_user_logged_in() ? 'bbp_user_logged_in' : 'bbp_user_login' );
+
+		echo $after_widget;
+	}
+
+	/**
+	 * Update the login widget options
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @param array $new_instance The new instance options
+	 * @param array $old_instance The old instance options
+	 */
+	function update( $new_instance, $old_instance ) {
+		$instance          = $old_instance;
+		$instance['title'] = strip_tags( $new_instance['title'] );
+
+		return $instance;
+	}
+
+	/**
+	 * Output the login widget options form
+	 *
+	 * @since bbPress (r)
+	 *
+	 * @param $instance Instance
+	 * @uses BBP_Login_Widget::get_field_id() To output the field id
+	 * @uses BBP_Login_Widget::get_field_name() To output the field name
+	 */
+	function form( $instance ) {
+		$title = !empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; ?>
+
+		<p>
+			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
+			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></label>
+		</p>
+
+		<?php
+	}
+}
+
+/**
  * bbPress Forum Widget
  *
  * Adds a widget which displays the forum list
@@ -82,7 +173,7 @@
 
 		<?php echo $after_widget;
 
-		endif;		
+		endif;
 	}
 
 	/**
@@ -278,7 +369,7 @@
 	 * @uses BBP_Topics_Widget::get_field_name() To output the field name
 	 */
 	function form( $instance ) {
-		$title     = !empty( $instance['title'] )     ? esc_attr( $instance['title']     ) : '';
+		$title     = !empty( $instance['title']     ) ? esc_attr( $instance['title']     ) : '';
 		$max_shown = !empty( $instance['max_shown'] ) ? esc_attr( $instance['max_shown'] ) : '';
 		$show_date = !empty( $instance['show_date'] ) ? esc_attr( $instance['show_date'] ) : '';
 		$pop_check = !empty( $instance['pop_check'] ) ? esc_attr( $instance['pop_check'] ) : ''; ?>
Index: bbp-themes/bbp-twentyten/css/bbpress.css
===================================================================
--- bbp-themes/bbp-twentyten/css/bbpress.css	(revision 2824)
+++ bbp-themes/bbp-twentyten/css/bbpress.css	(working copy)
@@ -365,3 +365,25 @@
 	font-size: 11px;
 	color: #aaa;
 }
+
+/* =Widgets
+-------------------------------------------------------------- */
+
+.widget-area .bbp-login-form fieldset legend {
+	display: none;
+}
+
+.widget-area .bbp-login-form .bbp-username,
+.widget-area .bbp-login-form .bbp-password,
+.widget-area .bbp-login-form .bbp-remember-me,
+.widget-area .bbp-login-form .bbp-submit-wrapper {
+	margin-top: 10px;
+}
+
+.widget-area .bbp-login-form .bbp-remember-me {
+	float: left;
+}
+
+.widget-area .bbp-login-form .bbp-submit-wrapper {
+	float: right;
+}
Index: bbp-themes/bbp-twentyten/form-bbp_user_logged_in.php
===================================================================
--- bbp-themes/bbp-twentyten/form-bbp_user_logged_in.php	(revision 0)
+++ bbp-themes/bbp-twentyten/form-bbp_user_logged_in.php	(revision 0)
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * User Logged in Form
+ *
+ * @package bbPress
+ * @subpackage Theme
+ */
+
+?>
+
+	<div class="bbp-logged-in">
+		<?php printf( __( 'Welcome, %1$s', 'bbpress' ),  bbp_get_user_profile_link( bbp_get_current_user_id() ) ); ?>
+		<?php bbp_admin_link( array( 'before' => ' | ' ) );?>
+		| <?php bbp_logout_link(); ?>
+	</div>
