Index: wp-content/themes/twentyten/style.css
===================================================================
--- wp-content/themes/twentyten/style.css	(revision 16075)
+++ wp-content/themes/twentyten/style.css	(working copy)
@@ -304,6 +304,7 @@
 	top: .5ex;
 }
 input[type="text"],
+input[type="password"],
 textarea {
 	background: #f9f9f9;
 	border: 1px solid #ccc;
Index: wp-includes/default-widgets.php
===================================================================
--- wp-includes/default-widgets.php	(revision 16075)
+++ wp-includes/default-widgets.php	(working copy)
@@ -320,7 +320,69 @@
 	}
 }
 
+
 /**
+ * User Authentication widget class
+ *
+ * Displays login form for visitors and once logged-in show profile, password change and logout links.
+ * 
+ * @todo form for setting selection of $args for wp_login_form()
+ * @todo allow user to register or request lostpassword.
+ * 
+ * @version 0.0.1
+ * @since 3.1.0
+ */
+class WP_Widget_Auth extends WP_Widget {
+
+	function WP_Widget_Auth() {
+		$widget_ops = array('classname' => 'widget_auth', 'description' => __( "A login form for your site.") );
+		$this->WP_Widget('authentication', __('Authentication'), $widget_ops);
+	}
+
+	function widget( $args, $instance ) {
+		extract($args);
+		$title = apply_filters('widget_title', empty($instance['title']) ? __('Login') : $instance['title'], $instance, $this->id_base);
+
+		echo $before_widget;
+		if ( $title )
+                    if(!is_user_logged_in()) {
+			echo $before_title . $title . $after_title;
+                        wp_login_form();
+                    } else {
+                        global $current_user;
+                        echo $before_title . 'Welcome, '.$current_user->display_name . $after_title;
+                    }
+                    ?>
+                <ul>
+                    <?php if(is_user_logged_in()) : ?>
+                    <li><a href="<?php echo admin_url( 'profile.php', 'admin' ); ?>">View your profile</a></li>
+                    <li><a href="<?php echo admin_url( 'profile.php#password', 'admin' ); ?>">Change Password</a></li>
+                    <li><?php wp_loginout(); ?></li>
+                    <?php else : wp_register();
+                    endif; ?>
+                </ul>
+<?php
+		echo $after_widget;
+	}
+
+	function update( $new_instance, $old_instance ) {
+		$instance = $old_instance;
+		$instance['title'] = strip_tags($new_instance['title']);
+
+		return $instance;
+	}
+
+	function form( $instance ) {
+		$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
+		$title = strip_tags($instance['title']);
+?>
+                <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p>
+<?php
+	}
+}
+
+
+/**
  * Calendar widget class
  *
  * @since 2.8.0
@@ -1138,6 +1200,8 @@
 
 	register_widget('WP_Widget_Links');
 
+	register_widget('WP_Widget_Auth');
+        
 	register_widget('WP_Widget_Meta');
 
 	register_widget('WP_Widget_Search');
