Index: src/wp-admin/admin-ajax.php
===================================================================
--- src/wp-admin/admin-ajax.php	(revision 29085)
+++ 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 29085)
+++ 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/includes/user.php
===================================================================
--- src/wp-admin/includes/user.php	(revision 29085)
+++ src/wp-admin/includes/user.php	(working copy)
@@ -174,6 +174,22 @@
 
 	if ( $update ) {
 		$user_id = wp_update_user( $user );
+
+		// Encourage the user to reset their password 
+		if( ! empty( $_POST['reset_password'] ) ) { 
+			update_user_option( $user_id, 'default_password_nag', true, true ); 
+		} 
+
+		// Send the new, plaintext password to the user 
+		if( ! empty( $_POST['send_password'] ) ) { 
+			$blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); 
+			$message  = sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n"; 
+			$message .= sprintf( __( 'Password: %s' ), $pass1 ) . "\r\n"; 
+			$message .= wp_login_url() . "\r\n"; 
+
+			wp_mail( $user->user_email, sprintf( __( '[%s] Your username and password' ), $blogname ), $message ); 
+		} 
+
 	} else {
 		$user_id = wp_insert_user( $user );
 		wp_new_user_notification( $user_id, isset( $_POST['send_password'] ) ? wp_unslash( $pass1 ) : '' );
Index: src/wp-admin/js/user-profile.js
===================================================================
--- src/wp-admin/js/user-profile.js	(revision 29085)
+++ src/wp-admin/js/user-profile.js	(working copy)
@@ -32,11 +32,56 @@
 
 	$(document).ready( function() {
 		var $colorpicker, $stylesheet, user_id, current_user_id,
-			select = $( '#display_name' );
+			select = $( '#display_name' ),
+			show_password = $( '#show-password' ),
+			hide_password = $( '#hide-password' ),
+			pass1 = $( '#pass1' );
 
-		$('#pass1').val('').keyup( check_pass_strength );
-		$('#pass2').val('').keyup( check_pass_strength );
-		$('#pass-strength-result').show();
+		/* 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.val( response ).trigger('keyup');
+				if( 'profile' == pagenow ) {
+					// User's own password
+					hide_password.show();
+				} else {
+					hide_password.hide();
+					show_password.show();
+				}
+				pass1.focus();
+			});
+		});
+		show_password.on('click', function(e) {
+			show_password.hide();
+			hide_password.show();
+			e.preventDefault();
+			$(pass1).attr('type', 'text');
+		});
+		hide_password.on('click', function(e) {
+			hide_password.hide();
+			show_password.show();
+			e.preventDefault();
+			$(pass1).attr('type', 'password');
+		});
+
+		$( '#pass-strength-result' ).show();
+
+		/* End Passwords */
+
 		$('.color-palette').click( function() {
 			$(this).siblings('input[name="admin_color"]').prop('checked', true);
 		});
Index: src/wp-admin/user-edit.php
===================================================================
--- src/wp-admin/user-edit.php	(revision 29085)
+++ src/wp-admin/user-edit.php	(working copy)
@@ -459,8 +459,25 @@
 	<th><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 type="password" name="pass1" id="pass1" class="regular-text" size="16" value="" autocomplete="off" /> 
+        <input type="button" name="generate-password" id="generate-password" value="<?php _e( 'Generate Password' ); ?>" class="button hide-if-no-js" /> 
+        <a href="#" id="show-password" class="hidden"><?php _e( 'Show Password' ); ?></a> 
+        <a href="#" id="hide-password" class="hidden"><?php _e( 'Hide Password' ); ?></a> 
+        <p class="description"><?php _e( 'If you would like to change the password type or generate a new one. Otherwise leave this blank.' ); ?></p> 
+		<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 if( ! IS_PROFILE_PAGE ) { ?> 
+        <p class="hide-if-no-js"> 
+                <label for="send_password"> 
+                        <input type="checkbox" name="send_password" id="send_password" /> <?php _e( 'Send this password to the user by email.' ); ?> 
+                </label> 
+                <br/> 
+                <label for="reset_password"> 
+                        <input type="checkbox" name="reset_password" id="reset_password" /> <?php _e( 'Encourage the user to change their password, once logged in.' ); ?> 
+                </label> 
+        </p> 
+        <?php } ?> 
 	</td>
 </tr>
 <tr>
@@ -468,9 +485,6 @@
 	<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>
 	</td>
 </tr>
 <?php endif; ?>
