diff --git src/wp-admin/js/check-updates.js src/wp-admin/js/check-updates.js
new file mode 100644
index 0000000..4b82716
--- /dev/null
+++ src/wp-admin/js/check-updates.js
@@ -0,0 +1,103 @@
+(function( $, wp, settings ) {
+	wp = wp || {};
+
+	/**
+	 * The WP checkUpdates object.
+	 *
+	 * @type {object}
+	 */
+	wp.checkUpdates = {};
+
+	/**
+	 * Current update counts.
+	 *
+	 * @type {object}
+	 */
+	wp.checkUpdates.currentCounts = settings.current_updates.counts;
+
+	/**
+	 * Current update string.
+	 *
+	 * @type {string}
+	 */
+	wp.checkUpdates.currentTitle = settings.current_updates.title;
+
+	/**
+	 * Perform check.
+	 */
+	wp.checkUpdates.performCheck = function() {
+		wp.ajax.post( 'check-updates', settings ).done( function( response ) {
+			wp.checkUpdates.updateAdminBar( response );
+			wp.checkUpdates.updateDashboardMenu( response );
+			wp.checkUpdates.updatePluginsMenu( response );
+			wp.checkUpdates.updateFooter( response );
+		});
+	};
+
+	/**
+	 * Update admin bar.
+	 *
+	 * @param {object} response Response from the server.
+	 */
+	wp.checkUpdates.updateAdminBar = function( response ) {
+		if ( response.counts.total === wp.checkUpdates.currentCounts.total ) {
+			return;
+		}
+
+		var $menu = $( '#wp-admin-bar-updates' );
+
+		$menu.find( '.ab-label' ).text( response.counts.total );
+		$menu.removeClass( 'hide-if-no-updates' );
+	};
+
+	/**
+	 * Update dashboard menu.
+	 *
+	 * @param {object} response Response from the server.
+	 */
+	wp.checkUpdates.updateDashboardMenu = function ( response ) {
+		if ( response.counts.total === wp.checkUpdates.currentCounts.total ) {
+			return;
+		}
+
+		var $menu = $( '#menu-dashboard' );
+
+		$menu.find( '.update-count' ).text( response.counts.total );
+		$menu.find( '.update-plugins' ).addClass( 'count-' + response.counts.total ).removeClass( 'count-' + wp.checkUpdates.currentCounts.total );
+	};
+
+	/**
+	 * Update plugins menu.
+	 *
+	 * @param {object} response Response from the server.
+	 */
+	wp.checkUpdates.updatePluginsMenu = function( response ) {
+		if ( response.counts.plugins === wp.checkUpdates.currentCounts.plugins ) {
+			return;
+		}
+
+		var $menu = $( '#menu-plugins' );
+
+		$menu.find( '.plugin-count' ).text( response.counts.plugins );
+		$menu.find( '.update-plugins' ).addClass( 'count-' + response.counts.plugins ).removeClass( 'count-' + wp.checkUpdates.currentCounts.plugins );
+	};
+
+	/**
+	 * Update footer.
+	 *
+	 * @param {object} response Response from the server.
+	 */
+	wp.checkUpdates.updateFooter = function( response ) {
+		if ( response.counts.wordpress === wp.checkUpdates.currentCounts.wordpress ) {
+			return;
+		}
+
+		$( '#footer-upgrade' ).html( response.message );
+	};
+
+	$( function() {
+		// Perform update check
+		wp.checkUpdates.performCheck();
+	} );
+
+})( jQuery, window.wp, window.wpCheckUpdates );
\ No newline at end of file
diff --git src/wp-includes/admin-bar.php src/wp-includes/admin-bar.php
index e87ac14..62efd44 100644
--- src/wp-includes/admin-bar.php
+++ src/wp-includes/admin-bar.php
@@ -807,12 +807,8 @@ function wp_admin_bar_appearance_menu( $wp_admin_bar ) {
  * @param WP_Admin_Bar $wp_admin_bar
  */
 function wp_admin_bar_updates_menu( $wp_admin_bar ) {
-
 	$update_data = wp_get_update_data();
 
-	if ( !$update_data['counts']['total'] )
-		return;
-
 	$title = '<span class="ab-icon"></span><span class="ab-label">' . number_format_i18n( $update_data['counts']['total'] ) . '</span>';
 	$title .= '<span class="screen-reader-text">' . $update_data['title'] . '</span>';
 
@@ -821,6 +817,7 @@ function wp_admin_bar_updates_menu( $wp_admin_bar ) {
 		'title' => $title,
 		'href'  => network_admin_url( 'update-core.php' ),
 		'meta'  => array(
+			'class' => $update_data['counts']['total'] ? '' : 'hide-if-no-updates',
 			'title' => $update_data['title'],
 		),
 	) );
diff --git src/wp-includes/css/admin-bar.css src/wp-includes/css/admin-bar.css
index e108a8e..b134d4e 100644
--- src/wp-includes/css/admin-bar.css
+++ src/wp-includes/css/admin-bar.css
@@ -593,6 +593,10 @@ html:lang(he-il) .rtl #wpadminbar *  {
 	top: 2px;
 }
 
+#wpadminbar .hide-if-no-updates {
+	display: none;
+}
+
 /**
  * Search
  */
diff --git src/wp-includes/script-loader.php src/wp-includes/script-loader.php
index e67997a..73942cc 100644
--- src/wp-includes/script-loader.php
+++ src/wp-includes/script-loader.php
@@ -694,6 +694,12 @@ function wp_default_scripts( &$scripts ) {
 			),
 		) );
 
+		$scripts->add( 'check-updates', "/wp-admin/js/check-updates$suffix.js", array( 'jquery', 'wp-util' ), false, 1 );
+		did_action( 'init' ) && $scripts->localize( 'check-updates', 'wpCheckUpdates', array(
+			'ajax_nonce' => wp_create_nonce( 'check-updates' ),
+			'current_updates' => wp_get_update_data(),
+		) );
+
 		$scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' );
 
 		$scripts->add( 'iris', '/wp-admin/js/iris.min.js', array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ), '1.0.7', 1 );
diff --git src/wp-includes/update.php src/wp-includes/update.php
index 5f074dc..0be3a4a 100644
--- src/wp-includes/update.php
+++ src/wp-includes/update.php
@@ -600,6 +600,8 @@ function wp_get_update_data() {
  * @since 2.8.0
  *
  * @global string $wp_version
+ *
+ * @return bool
  */
 function _maybe_update_core() {
 	// include an unmodified $wp_version
@@ -610,10 +612,13 @@ function _maybe_update_core() {
 	if ( isset( $current->last_checked, $current->version_checked ) &&
 		12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) &&
 		$current->version_checked == $wp_version ) {
-		return;
+
+		return false;
 	}
-	wp_version_check();
+
+	return true;
 }
+
 /**
  * Check the last time plugins were run before checking plugin versions.
  *
@@ -623,12 +628,16 @@ function _maybe_update_core() {
  *
  * @since 2.7.0
  * @access private
+ *
+ * @return bool
  */
 function _maybe_update_plugins() {
 	$current = get_site_transient( 'update_plugins' );
-	if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) )
-		return;
-	wp_update_plugins();
+	if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) {
+		return false;
+	}
+
+	return true;
 }
 
 /**
@@ -639,12 +648,51 @@ function _maybe_update_plugins() {
  *
  * @since 2.7.0
  * @access private
+ *
+ * @return bool
  */
 function _maybe_update_themes() {
 	$current = get_site_transient( 'update_themes' );
-	if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) )
+	if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) {
+		return false;
+	}
+
+	return true;
+}
+
+/**
+ * Maybe trigger core, plugin and theme updates.
+ */
+function maybe_trigger_updates() {
+	if ( ! _maybe_update_core() && ! _maybe_update_plugins() && ! _maybe_update_themes() ) {
 		return;
-	wp_update_themes();
+	}
+
+	wp_enqueue_script( 'check-updates' );
+}
+
+/**
+ * Maybe check core, plugin and theme updates.
+ */
+function ajax_check_update_apis() {
+	check_ajax_referer( 'check-updates', 'ajax_nonce' );
+
+	if ( _maybe_update_core() ) {
+		wp_version_check();
+	}
+
+	if ( _maybe_update_plugins() ) {
+		wp_update_plugins();
+	}
+
+	if ( _maybe_update_themes() ) {
+		wp_update_themes();
+	}
+
+	$response = wp_get_update_data();
+	$response['message'] = core_update_footer();
+
+	wp_send_json_success( $response );
 }
 
 /**
@@ -678,23 +726,24 @@ function wp_clean_update_cache() {
 	delete_site_transient( 'update_core' );
 }
 
+add_action( 'wp_ajax_check-updates', 'ajax_check_update_apis' );
+
 if ( ( ! is_main_site() && ! is_network_admin() ) || wp_doing_ajax() ) {
 	return;
 }
 
-add_action( 'admin_init', '_maybe_update_core' );
+add_action( 'admin_init', 'maybe_trigger_updates' );
+
 add_action( 'wp_version_check', 'wp_version_check' );
 
 add_action( 'load-plugins.php', 'wp_update_plugins' );
 add_action( 'load-update.php', 'wp_update_plugins' );
 add_action( 'load-update-core.php', 'wp_update_plugins' );
-add_action( 'admin_init', '_maybe_update_plugins' );
 add_action( 'wp_update_plugins', 'wp_update_plugins' );
 
 add_action( 'load-themes.php', 'wp_update_themes' );
 add_action( 'load-update.php', 'wp_update_themes' );
 add_action( 'load-update-core.php', 'wp_update_themes' );
-add_action( 'admin_init', '_maybe_update_themes' );
 add_action( 'wp_update_themes', 'wp_update_themes' );
 
 add_action( 'update_option_WPLANG', 'wp_clean_update_cache' , 10, 0 );
