Index: wp-admin/includes/upgrade.php
===================================================================
--- wp-admin/includes/upgrade.php	(revision 13073)
+++ wp-admin/includes/upgrade.php	(working copy)
@@ -33,7 +33,7 @@
  * @param null $deprecated Optional. Not used.
  * @return array Array keys 'url', 'user_id', 'password', 'password_message'.
  */
-function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated = '' ) {
+function wp_install( $blog_title, $user_name, $user_email, $public, $user_password = '', $deprecated = '' ) {
 	global $wp_rewrite;
 
 	if ( !empty( $deprecated ) )
@@ -60,13 +60,15 @@
 	// Create default user.  If the user already exists, the user tables are
 	// being shared among blogs.  Just set the role in that case.
 	$user_id = username_exists($user_name);
-	if ( !$user_id ) {
-		$random_password = wp_generate_password();
+	if ( !$user_id && $user_password == '' ) {
+		$user_password = wp_generate_password();
 		$message = __('<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.');
-		$user_id = wp_create_user($user_name, $random_password, $user_email);
-		update_user_option($user_id, 'default_password_nag', true, true);
+		$user_id = wp_create_user($user_name, $user_password, $user_email);
+		update_usermeta($user_id, 'default_password_nag', true);
+	} else if ( !$user_id ) {
+		$message = __('<strong><em>Note that password</em></strong> carefully!');
+		$user_id = wp_create_user($user_name, $user_password, $user_email);
 	} else {
-		$random_password = '';
 		$message =  __('User already exists.  Password inherited.');
 	}
 
@@ -77,11 +79,11 @@
 
 	$wp_rewrite->flush_rules();
 
-	wp_new_blog_notification($blog_title, $guessurl, $user_id, $random_password);
+	wp_new_blog_notification($blog_title, $guessurl, $user_id, $user_password);
 
 	wp_cache_flush();
 
-	return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $random_password, 'password_message' => $message);
+	return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message);
 }
 endif;
 
Index: wp-admin/css/install.css
===================================================================
--- wp-admin/css/install.css	(revision 13073)
+++ wp-admin/css/install.css	(working copy)
@@ -1 +1 @@
-html{background:#f7f7f7;}body{background:#fff;color:#333;font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;margin:2em auto 0 auto;width:700px;padding:1em 2em;-moz-border-radius:11px;-khtml-border-radius:11px;-webkit-border-radius:11px;border-radius:11px;border:1px solid #dfdfdf;}a{color:#2583ad;text-decoration:none;}a:hover{color:#d54e21;}h1{border-bottom:1px solid #dadada;clear:both;color:#666;font:24px Georgia,"Times New Roman",Times,serif;margin:5px 0 0 -4px;padding:0;padding-bottom:7px;}h2{font-size:16px;}p,li{padding-bottom:2px;font-size:12px;line-height:18px;}code{font-size:13px;}ul,ol{padding:5px 5px 5px 22px;}#logo{margin:6px 0 14px 0;border-bottom:none;}.step{margin:20px 0 15px;}.step,th{text-align:left;padding:0;}.submit input,.button,.button-secondary{font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;text-decoration:none;font-size:14px!important;line-height:16px;padding:6px 12px;cursor:pointer;border:1px solid #bbb;color:#464646;-moz-border-radius:15px;-khtml-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;-khtml-box-sizing:content-box;box-sizing:content-box;}.button:hover,.button-secondary:hover,.submit input:hover{color:#000;border-color:#666;}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top;}.form-table{border-collapse:collapse;margin-top:1em;width:100%;}.form-table td{margin-bottom:9px;padding:10px;border-bottom:8px solid #fff;font-size:12px;}.form-table th{font-size:13px;text-align:left;padding:16px 10px 10px 10px;border-bottom:8px solid #fff;width:110px;vertical-align:top;}.form-table tr{background:#f3f3f3;}.form-table code{line-height:18px;font-size:18px;}.form-table p{margin:4px 0 0 0;font-size:11px;}.form-table input{line-height:20px;font-size:15px;padding:2px;}#error-page{margin-top:50px;}#error-page p{font-size:12px;line-height:18px;margin:25px 0 20px;}#error-page code{font-family:Consolas,Monaco,Courier,monospace;}
\ No newline at end of file
+html{background:#f7f7f7;}body{background:#fff;color:#333;font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;margin:2em auto 0 auto;width:700px;padding:1em 2em;-moz-border-radius:11px;-khtml-border-radius:11px;-webkit-border-radius:11px;border-radius:11px;border:1px solid #dfdfdf;}a{color:#2583ad;text-decoration:none;}a:hover{color:#d54e21;}h1{border-bottom:1px solid #dadada;clear:both;color:#666;font:24px Georgia,"Times New Roman",Times,serif;margin:5px 0 0 -4px;padding:0;padding-bottom:7px;}h2{font-size:16px;}p,li{padding-bottom:2px;font-size:12px;line-height:18px;}code{font-size:13px;}ul,ol{padding:5px 5px 5px 22px;}#logo{margin:6px 0 14px 0;border-bottom:none;}.step{margin:20px 0 15px;}.step,th{text-align:left;padding:0;}.submit input,.button,.button-secondary{font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;text-decoration:none;font-size:14px!important;line-height:16px;padding:6px 12px;cursor:pointer;border:1px solid #bbb;color:#464646;-moz-border-radius:15px;-khtml-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;-khtml-box-sizing:content-box;box-sizing:content-box;}.button:hover,.button-secondary:hover,.submit input:hover{color:#000;border-color:#666;}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top;}.form-table{border-collapse:collapse;margin-top:1em;width:100%;}.form-table td{margin-bottom:9px;padding:10px;border-bottom:8px solid #fff;font-size:12px;}.form-table th{font-size:13px;text-align:left;padding:16px 10px 10px 10px;border-bottom:8px solid #fff;width:110px;vertical-align:top;}.form-table tr{background:#f3f3f3;}.form-table code{line-height:18px;font-size:18px;}.form-table p{margin:4px 0 0 0;font-size:11px;}.form-table input{line-height:20px;font-size:15px;padding:2px;}#error-page{margin-top:50px;}#error-page p{font-size:12px;line-height:18px;margin:25px 0 20px;}#error-page code{font-family:Consolas,Monaco,Courier,monospace;}#pass-strength-result {background-color: #EEEEEE;border-color: #DDDDDD !important;border-style: solid;border-width: 1px;float: left;margin: 12px 5px 5px 1px;padding: 5px;text-align: center;width: 200px;}#pass-strength-result.bad {background-color: #FFB78C;border-color: #FF853C !important;}#pass-strength-result.good {background-color: #FFEC8B;border-color: #FFCC00 !important;}#pass-strength-result.short {background-color: #FFA0A0;border-color: #F04040 !important;}#pass-strength-result.strong {background-color: #C3FF88;border-color: #8DFF1C !important;}
Index: wp-admin/css/install.dev.css
===================================================================
--- wp-admin/css/install.dev.css	(revision 13073)
+++ wp-admin/css/install.dev.css	(working copy)
@@ -131,3 +131,35 @@
 }
 
 #error-page code { font-family: Consolas, Monaco, Courier, monospace; }
+
+#pass-strength-result {
+	background-color: #EEEEEE;
+	border-color: #DDDDDD !important;
+	border-style: solid;
+	border-width: 1px;
+	float: left;
+	margin: 12px 5px 5px 1px;
+	padding: 5px;
+	text-align: center;
+	width: 200px;
+}
+
+#pass-strength-result.bad {
+	background-color: #FFB78C;
+	border-color: #FF853C !important;
+}
+
+#pass-strength-result.good {
+	background-color: #FFEC8B;
+	border-color: #FFCC00 !important;
+}
+
+#pass-strength-result.short {
+	background-color: #FFA0A0;
+	border-color: #F04040 !important;
+}
+
+#pass-strength-result.strong {
+	background-color: #C3FF88;
+	border-color: #8DFF1C !important;
+}
Index: wp-admin/install.php
===================================================================
--- wp-admin/install.php	(revision 13073)
+++ wp-admin/install.php	(working copy)
@@ -20,6 +20,9 @@
 /** Load WordPress Administration Upgrade API */
 require_once(dirname(__FILE__) . '/includes/upgrade.php');
 
+/** Load wpdb */
+require_once(dirname(dirname(__FILE__)) . '/wp-includes/wp-db.php');
+
 if (isset($_GET['step']))
 	$step = $_GET['step'];
 else
@@ -49,6 +52,9 @@
 }//end function display_header();
 
 function display_setup_form( $error = null ) {
+	global $wpdb;
+	$user_table = ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != null ) ? true : false;
+
 	// Ensure that Blogs appear in search engines by default
 	$blog_public = 1;
 	if ( isset($_POST) && !empty($_POST) ) {
@@ -66,6 +72,26 @@
 			<td><input name="weblog_title" type="text" id="weblog_title" size="25" value="<?php echo ( isset($_POST['weblog_title']) ? esc_attr($_POST['weblog_title']) : '' ); ?>" /></td>
 		</tr>
 		<tr>
+			<th scope="row"><label for="user_name"><?php _e('User Name'); ?></label></th>
+			<td>
+			<?php if ( $user_table ) { echo 'User(s) already exists. <input name="user_name" type="hidden" id="user_name" value="admin" />'; } else { ?><input name="user_name" type="text" id="user_login" size="25" value="<?php echo ( isset($_POST['user_name']) ? esc_attr($_POST['user_name']) : 'admin' ); ?>" /><?php } ?>
+			</td>
+		</tr>
+		<tr>
+			<th scope="row"><label for="admin_password"><?php _e('Password'); ?></label></th>
+			<td>
+				<?php if ( $user_table ) { 
+					echo 'No user is being created, so no new password is needed. <input name="admin_password" type="hidden" id="admin_password" value="" />'; 
+				}
+				else {
+					?><input name="admin_password" type="password" id="pass1" size="25" value="<?php echo ( isset($_POST['admin_password']) ? esc_attr($_POST['admin_password']) : '' ); ?>" />
+					<br /><?php _e('A password will be automatically generated for you if this field is blank.'); ?>
+					<br /><div id="pass-strength-result"><?php _e('Strength indicator'); ?></div>
+					<p class="description indicator-hint"><?php _e('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p><?php 
+				} ?>
+			</td>
+		</tr>
+		<tr>
 			<th scope="row"><label for="admin_email"><?php _e('Your E-mail'); ?></label></th>
 			<td><input name="admin_email" type="text" id="admin_email" size="25" value="<?php echo ( isset($_POST['admin_email']) ? esc_attr($_POST['admin_email']) : '' ); ?>" /><br />
 			<?php _e('Double-check your email address before continuing.'); ?></td>
@@ -123,15 +149,21 @@
 		display_header();
 		// Fill in the data we gathered
 		$weblog_title = isset($_POST['weblog_title']) ? stripslashes($_POST['weblog_title']) : '';
+		$user_name = isset($_POST['user_name']) ? stripslashes($_POST['user_name']) : '';
+		$admin_password = isset($_POST['admin_password']) ? stripslashes($_POST['admin_password']) : '';
 		$admin_email = isset($_POST['admin_email']) ? stripslashes($_POST['admin_email']) : '';
 		$public = isset($_POST['blog_public']) ? (int) $_POST['blog_public'] : 0;
 		// check e-mail address
 		$error = false;
-		if (empty($admin_email)) {
+		if ( empty( $user_name ) ) {
 			// TODO: poka-yoke
+			display_setup_form( __('you must provide a valid user name.') );
+			$error = true;
+		} else if ( empty( $admin_email ) ) {
+			// TODO: poka-yoke
 			display_setup_form( __('you must provide an e-mail address.') );
 			$error = true;
-		} else if (!is_email($admin_email)) {
+		} else if ( !is_email( $admin_email ) ) {
 			// TODO: poka-yoke
 			display_setup_form( __('that isn&#8217;t a valid e-mail address.  E-mail addresses look like: <code>username@example.com</code>') );
 			$error = true;
@@ -139,7 +171,7 @@
 
 		if ( $error === false ) {
 			$wpdb->show_errors();
-			$result = wp_install($weblog_title, 'admin', $admin_email, $public);
+			$result = wp_install($weblog_title, $user_name, $admin_email, $public, $admin_password);
 			extract($result, EXTR_SKIP);
 ?>
 
@@ -150,7 +182,7 @@
 <table class="form-table">
 	<tr>
 		<th><?php _e('Username'); ?></th>
-		<td><code>admin</code></td>
+		<td><code><?php echo $user_name; ?></code></td>
 	</tr>
 	<tr>
 		<th><?php _e('Password'); ?></th>
@@ -169,5 +201,22 @@
 }
 ?>
 <script type="text/javascript">var t = document.getElementById('weblog_title'); if (t){ t.focus(); }</script>
+<script type="text/javascript" src="../wp-includes/js/jquery/jquery.js"></script>
+<script type="text/javascript" src="js/password-strength-meter.js"></script>
+<script type="text/javascript" src="js/user-profile.js"></script>
+<script type="text/javascript" src="js/utils.js"></script>
+<script type='text/javascript'>
+/* <![CDATA[ */
+try{convertEntities(commonL10n);}catch(e){};
+var pwsL10n = {
+ empty: "Strength indicator",
+ short: "Very weak",
+ bad: "Weak",
+ good: "Medium",
+ strong: "Strong"
+};
+try{convertEntities(pwsL10n);}catch(e){};
+/* ]]> */
+</script>
 </body>
 </html>
