Index: src/wp-admin/admin-ajax.php
===================================================================
--- src/wp-admin/admin-ajax.php	(revision 29094)
+++ src/wp-admin/admin-ajax.php	(working copy)
@@ -49,18 +49,18 @@
 );
 
 $core_actions_post = array(
-	'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link',
-	'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment',
-	'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment',
-	'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes',
-	'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax',
-	'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
-	'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
-	'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post',
-	'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
-	'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
-	'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
-	'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail'
+	'oembed-cache',               'image-editor',           'delete-comment',     'delete-tag',          'delete-link',
+	'delete-meta',                'delete-post',            'trash-post',         'untrash-post',        'delete-page',
+	'add-link-category',          'add-tag',                'get-tagcloud',       'get-comments',        'replyto-comment',
+	'edit-comment',               'add-menu-item',          'add-meta',           'add-user',            'closed-postboxes',
+	'hidden-columns',             'update-welcome-panel',   'menu-get-metabox',   'wp-link-ajax',        'dim-comment',
+	'sample-permalink',           'inline-save',            'inline-save-tax',    'find_posts',          'widgets-order',
+	'save-widget',                'set-post-thumbnail',     'date_format',        'time_format',         'wp-fullscreen-save-post',
+	'send-attachment-to-editor',  'save-attachment-order',  'heartbeat',          'get-revision-diffs',  'generate_password',
+	'save-user-color-scheme',     'update-widget',          'query-themes',       'parse-embed',         'set-attachment-thumbnail',
+	'wp-remove-post-lock',        'dismiss-wp-pointer',     'upload-attachment',  'get-attachment',      'menu-locations-save',
+	'menu-quick-search',          'meta-box-order',         'get-permalink',      'query-attachments',   'save-attachment',
+	'save-attachment-compat',     'send-link-to-editor',
 );
 
 // Register core Ajax calls.
Index: src/wp-admin/includes/ajax-actions.php
===================================================================
--- src/wp-admin/includes/ajax-actions.php	(revision 29094)
+++ src/wp-admin/includes/ajax-actions.php	(working copy)
@@ -2223,6 +2223,15 @@
 }
 
 /**
+ * Ajax handler for password generation
+ *
+ * @since 4.0
+ */
+function wp_ajax_generate_password() { 
+	die( wp_generate_password() ); 
+}
+
+/**
  * Ajax handler for saving backwards compatible attachment attributes.
  *
  * @since 3.5.0
Index: src/wp-admin/js/user-profile.js
===================================================================
--- src/wp-admin/js/user-profile.js	(revision 29094)
+++ src/wp-admin/js/user-profile.js	(working copy)
@@ -30,98 +30,133 @@
 		}
 	}
 
-	$(document).ready( function() {
-		var $colorpicker, $stylesheet, user_id, current_user_id,
-			select = $( '#display_name' );
+	var $colorpicker, $stylesheet, user_id, current_user_id,
+		select = $( '#display_name' ),
+		pass1 = $( '#pass1' );
 
-		$('#pass1').val('').keyup( check_pass_strength );
-		$('#pass2').val('').keyup( check_pass_strength );
-		$('#pass-strength-result').show();
-		$('.color-palette').click( function() {
-			$(this).siblings('input[name="admin_color"]').prop('checked', true);
+	/* Passwords */
+	pass1.val('').keyup(function(e) {
+		if( ! pass1.is(':focus') || 'text' == pass1.attr('type') ) {
+			//return;
+		}
+		check_pass_strength();
+		changed = true;
+	});
+
+	$( '#generate-password' ).on( 'click', function() {
+		if( 'profile' == pagenow ) {
+			// User's own password
+			$(pass1).attr( 'type', 'text' );
+		} else {
+			$(pass1).attr( 'type', 'password' );
+		}
+		$.post( ajaxurl, { action: 'generate_password' }, function( response ) {
+			pass1.attr('type', 'text');
+			$( '#show-password' ).text( 'Hide Password' );
+			pass1.val( response ).trigger('keyup');
+			pass1.focus();
 		});
+	});
+	$( '#show-password' ).on( 'click', function() {
+		if ( 'password' == pass1.attr( 'type' ) ) {
+			pass1.attr('type', 'text');
+			$( this ).text( 'Hide Password' );
+		} else {
+			pass1.attr('type', 'password');
+			$( this ).text( 'Show Password' );
+		}
 
-		if ( select.length ) {
-			$('#first_name, #last_name, #nickname').bind( 'blur.user_profile', function() {
-				var dub = [],
-					inputs = {
-						display_nickname  : $('#nickname').val() || '',
-						display_username  : $('#user_login').val() || '',
-						display_firstname : $('#first_name').val() || '',
-						display_lastname  : $('#last_name').val() || ''
-					};
+		return false;
+	});
 
-				if ( inputs.display_firstname && inputs.display_lastname ) {
-					inputs.display_firstlast = inputs.display_firstname + ' ' + inputs.display_lastname;
-					inputs.display_lastfirst = inputs.display_lastname + ' ' + inputs.display_firstname;
-				}
+	$( '#pass-strength-result' ).show();
 
-				$.each( $('option', select), function( i, el ){
-					dub.push( el.value );
-				});
+	/* End Passwords */
 
-				$.each(inputs, function( id, value ) {
-					if ( ! value ) {
-						return;
-					}
+	$('.color-palette').click( function() {
+		$(this).siblings('input[name="admin_color"]').prop('checked', true);
+	});
 
-					var val = value.replace(/<\/?[a-z][^>]*>/gi, '');
+	if ( select.length ) {
+		$('#first_name, #last_name, #nickname').bind( 'blur.user_profile', function() {
+			var dub = [],
+				inputs = {
+					display_nickname  : $('#nickname').val() || '',
+					display_username  : $('#user_login').val() || '',
+					display_firstname : $('#first_name').val() || '',
+					display_lastname  : $('#last_name').val() || ''
+				};
 
-					if ( inputs[id].length && $.inArray( val, dub ) === -1 ) {
-						dub.push(val);
-						$('<option />', {
-							'text': val
-						}).appendTo( select );
-					}
-				});
+			if ( inputs.display_firstname && inputs.display_lastname ) {
+				inputs.display_firstlast = inputs.display_firstname + ' ' + inputs.display_lastname;
+				inputs.display_lastfirst = inputs.display_lastname + ' ' + inputs.display_firstname;
+			}
+
+			$.each( $('option', select), function( i, el ){
+				dub.push( el.value );
 			});
-		}
 
-		$colorpicker = $( '#color-picker' );
-		$stylesheet = $( '#colors-css' );
-		user_id = $( 'input#user_id' ).val();
-		current_user_id = $( 'input[name="checkuser_id"]' ).val();
+			$.each(inputs, function( id, value ) {
+				if ( ! value ) {
+					return;
+				}
 
-		$colorpicker.on( 'click.colorpicker', '.color-option', function() {
-			var colors,
-				$this = $(this);
+				var val = value.replace(/<\/?[a-z][^>]*>/gi, '');
 
-			if ( $this.hasClass( 'selected' ) ) {
-				return;
-			}
+				if ( inputs[id].length && $.inArray( val, dub ) === -1 ) {
+					dub.push(val);
+					$('<option />', {
+						'text': val
+					}).appendTo( select );
+				}
+			});
+		});
+	}
 
-			$this.siblings( '.selected' ).removeClass( 'selected' );
-			$this.addClass( 'selected' ).find( 'input[type="radio"]' ).prop( 'checked', true );
+	$colorpicker = $( '#color-picker' );
+	$stylesheet = $( '#colors-css' );
+	user_id = $( 'input#user_id' ).val();
+	current_user_id = $( 'input[name="checkuser_id"]' ).val();
 
-			// Set color scheme
-			if ( user_id === current_user_id ) {
-				// Load the colors stylesheet.
-				// The default color scheme won't have one, so we'll need to create an element.
-				if ( 0 === $stylesheet.length ) {
-					$stylesheet = $( '<link rel="stylesheet" />' ).appendTo( 'head' );
-				}
-				$stylesheet.attr( 'href', $this.children( '.css_url' ).val() );
+	$colorpicker.on( 'click.colorpicker', '.color-option', function() {
+		var colors,
+			$this = $(this);
 
-				// repaint icons
-				if ( typeof wp !== 'undefined' && wp.svgPainter ) {
-					try {
-						colors = $.parseJSON( $this.children( '.icon_colors' ).val() );
-					} catch ( error ) {}
+		if ( $this.hasClass( 'selected' ) ) {
+			return;
+		}
 
-					if ( colors ) {
-						wp.svgPainter.setColors( colors );
-						wp.svgPainter.paint();
-					}
+		$this.siblings( '.selected' ).removeClass( 'selected' );
+		$this.addClass( 'selected' ).find( 'input[type="radio"]' ).prop( 'checked', true );
+
+		// Set color scheme
+		if ( user_id === current_user_id ) {
+			// Load the colors stylesheet.
+			// The default color scheme won't have one, so we'll need to create an element.
+			if ( 0 === $stylesheet.length ) {
+				$stylesheet = $( '<link rel="stylesheet" />' ).appendTo( 'head' );
+			}
+			$stylesheet.attr( 'href', $this.children( '.css_url' ).val() );
+
+			// repaint icons
+			if ( typeof wp !== 'undefined' && wp.svgPainter ) {
+				try {
+					colors = $.parseJSON( $this.children( '.icon_colors' ).val() );
+				} catch ( error ) {}
+
+				if ( colors ) {
+					wp.svgPainter.setColors( colors );
+					wp.svgPainter.paint();
 				}
+			}
 
-				// update user option
-				$.post( ajaxurl, {
-					action:       'save-user-color-scheme',
-					color_scheme: $this.children( 'input[name="admin_color"]' ).val(),
-					nonce:        $('#color-nonce').val()
-				});
-			}
-		});
+			// update user option
+			$.post( ajaxurl, {
+				action:       'save-user-color-scheme',
+				color_scheme: $this.children( 'input[name="admin_color"]' ).val(),
+				nonce:        $('#color-nonce').val()
+			});
+		}
 	});
 
 })(jQuery);
Index: src/wp-admin/user-edit.php
===================================================================
--- src/wp-admin/user-edit.php	(revision 29094)
+++ src/wp-admin/user-edit.php	(working copy)
@@ -456,21 +456,20 @@
 if ( $show_password_fields ) :
 ?>
 <tr id="password">
-	<th><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
+	<th scope="row"><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
 	<td>
 		<input class="hidden" value=" " /><!-- #24364 workaround -->
-		<input type="password" name="pass1" id="pass1" class="regular-text" size="16" value="" autocomplete="off" /><br />
-		<span class="description"><?php _e( 'If you would like to change the password type a new one. Otherwise leave this blank.' ); ?></span>
+		<input name="pass1" type="password" id="pass1" class="regular-text" autocomplete="off" />
+		<button type="button" id="generate-password" class="button hide-if-no-js"><?php _e( 'Generate Password' ); ?></button> 
+		<a href="#" id="show-password"><?php _e( 'Show Password' ); ?></a> 
 	</td>
 </tr>
 <tr>
 	<th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th>
 	<td>
-	<input name="pass2" type="password" id="pass2" class="regular-text" size="16" value="" autocomplete="off" /><br />
-	<span class="description" for="pass2"><?php _e( 'Type your new password again.' ); ?></span>
-	<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>
+		<input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" /><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>
 	</td>
 </tr>
 <?php endif; ?>
Index: src/wp-admin/user-new.php
===================================================================
--- src/wp-admin/user-new.php	(revision 29094)
+++ src/wp-admin/user-new.php	(working copy)
@@ -389,6 +389,8 @@
 		<td>
 			<input class="hidden" value=" " /><!-- #24364 workaround -->
 			<input name="pass1" type="password" id="pass1" autocomplete="off" />
+			<button type="button" id="generate-password" class="button hide-if-no-js"><?php _e( 'Generate Password' ); ?></button> 
+			<a href="#" id="show-password"><?php _e( 'Show Password' ); ?></a> 
 		</td>
 	</tr>
 	<tr class="form-field form-required">
