diff --git a/src/wp-admin/includes/class-wp-plugins-list-table.php b/src/wp-admin/includes/class-wp-plugins-list-table.php
index a36ec05221..c836c54882 100644
--- a/src/wp-admin/includes/class-wp-plugins-list-table.php
+++ b/src/wp-admin/includes/class-wp-plugins-list-table.php
@@ -528,6 +528,8 @@ class WP_Plugins_List_Table extends WP_List_Table {
 		if ( ! is_multisite() || $this->screen->in_admin( 'network' ) ) {
 			if ( current_user_can( 'update_plugins' ) ) {
 				$actions['update-selected'] = __( 'Update' );
+				$actions['enable-autoupdate-selected'] = __( 'Enable auto update' );
+				$actions['disable-autoupdate-selected'] = __( 'Disable auto update' );
 			}
 			if ( current_user_can( 'delete_plugins' ) && ( 'active' != $status ) ) {
 				$actions['delete-selected'] = __( 'Delete' );
@@ -960,6 +962,11 @@ class WP_Plugins_List_Table extends WP_List_Table {
 						}
 					}
 
+					$wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
+					if ( in_array( $plugin_file, $wp_autoupdated_plugins ) ) {
+						echo '<p class="plugin-autoupdate-enabled"><span class="dashicons dashicons-update" aria-hidden="true"></span> ' . __( 'Automatic update activated' ) . '</p>';
+					}
+
 					echo '</td>';
 					break;
 				default:
diff --git a/src/wp-admin/plugins.php b/src/wp-admin/plugins.php
index acebd8e452..3bbca4fdf0 100644
--- a/src/wp-admin/plugins.php
+++ b/src/wp-admin/plugins.php
@@ -154,6 +154,50 @@ if ( $action ) {
 			require_once( ABSPATH . 'wp-admin/admin-footer.php' );
 			exit;
 
+		case 'enable-autoupdate-selected':
+			if ( ! current_user_can( 'update_plugins' ) ) {
+				wp_die( __( 'Sorry, you are not allowed to enable plugin automatic updates.' ) );
+			}
+
+			check_admin_referer( 'bulk-plugins' );
+
+			$plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array();
+
+			if ( empty( $plugins ) ) {
+				wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) );
+				exit;
+			}
+
+			$previous_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
+			$new_autoupdated_plugins = array_merge( $previous_autoupdated_plugins, $plugins );
+			$new_autoupdated_plugins = array_unique( $new_autoupdated_plugins );
+			update_option( 'wp_autoupdated_plugins', $new_autoupdated_plugins );
+
+			wp_redirect( self_admin_url( "plugins.php?enable-autoupdate=true&plugin_status=$status&paged=$page&s=$s" ) );
+			exit;
+
+		case 'disable-autoupdate-selected':
+			if ( ! current_user_can( 'update_plugins' ) ) {
+				wp_die( __( 'Sorry, you are not allowed to disable plugin automatic updates.' ) );
+			}
+
+			check_admin_referer( 'bulk-plugins' );
+
+			$plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array();
+
+			if ( empty( $plugins ) ) {
+				wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) );
+				exit;
+			}
+			
+			$previous_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
+			$new_autoupdated_plugins = array_diff( $previous_autoupdated_plugins, $plugins );
+			$new_autoupdated_plugins = array_unique( $new_autoupdated_plugins );
+			update_option( 'wp_autoupdated_plugins', $new_autoupdated_plugins );
+
+			wp_redirect( self_admin_url( "plugins.php?disable-autoupdate=true&plugin_status=$status&paged=$page&s=$s" ) );
+			exit;
+
 		case 'error_scrape':
 			if ( ! current_user_can( 'activate_plugin', $plugin ) ) {
 				wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) );
@@ -578,6 +622,10 @@ elseif ( isset( $_GET['deleted'] ) ) :
 	<div id="message" class="updated notice is-dismissible"><p><?php _e( 'Selected plugins deactivated.' ); ?></p></div>
 <?php elseif ( 'update-selected' == $action ) : ?>
 	<div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins are up to date.' ); ?></p></div>
+<?php elseif ( isset( $_GET['enable-autoupdate'] ) ) : ?>
+	<div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins will now update automatically.' ); ?></p></div>
+<?php elseif ( isset( $_GET['disable-autoupdate'] ) ) : ?>
+	<div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins won’t automatically update anymore.' ); ?></p></div>
 <?php elseif ( isset( $_GET['resume'] ) ) : ?>
 	<div id="message" class="updated notice is-dismissible"><p><?php _e( 'Plugin resumed.' ); ?></p></div>
 <?php endif; ?>
diff --git a/src/wp-includes/update.php b/src/wp-includes/update.php
index dfb27b2aad..e8ef30eeed 100644
--- a/src/wp-includes/update.php
+++ b/src/wp-includes/update.php
@@ -813,6 +813,15 @@ if ( ( ! is_main_site() && ! is_network_admin() ) || wp_doing_ajax() ) {
 	return;
 }
 
+function wp_auto_update_plugin( $update, $item ) {
+	$wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
+	if ( in_array( $item->plugin, $wp_autoupdated_plugins ) ) {
+		return true;
+	} else {
+		return $update;
+	}
+}
+
 add_action( 'admin_init', '_maybe_update_core' );
 add_action( 'wp_version_check', 'wp_version_check' );
 
@@ -831,5 +840,6 @@ add_action( 'wp_update_themes', 'wp_update_themes' );
 add_action( 'update_option_WPLANG', 'wp_clean_update_cache', 10, 0 );
 
 add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' );
+add_filter( 'auto_update_plugin', 'wp_auto_update_plugin', 10, 2 );
 
 add_action( 'init', 'wp_schedule_update_checks' );
