Index: wp-includes/update.php
===================================================================
--- wp-includes/update.php	(revision 19314)
+++ wp-includes/update.php	(working copy)
@@ -33,6 +33,12 @@
 		$current->updates = array();
 		$current->version_checked = $wp_version;
 	}
+	
+	// Wait 60 seconds between multiple version check requests
+	$timeout = 60;
+	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
+	if ( $time_not_changed )
+		return false;
 
 	$locale = apply_filters( 'core_version_check_locale', get_locale() );
 
@@ -143,30 +149,44 @@
 
 	$new_option = new stdClass;
 	$new_option->last_checked = time();
-	// Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
-	$timeout = in_array( current_filter(), array( 'load-plugins.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
-	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
-
-	$plugin_changed = false;
-	foreach ( $plugins as $file => $p ) {
-		$new_option->checked[ $file ] = $p['Version'];
 
-		if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
-			$plugin_changed = true;
+	// Check for update on a different schedule, depending on the page.
+	switch ( current_filter() ) {
+		case 'load-update-core.php' :
+			$timeout = 60; // 1 min
+			break;
+		case 'load-plugins.php' :
+		case 'load-update.php' :
+			$timeout = 3600; // 1 hour
+			break;
+		default :
+			$timeout = 43200; // 12 hours
 	}
+	
+	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
 
-	if ( isset ( $current->response ) && is_array( $current->response ) ) {
-		foreach ( $current->response as $plugin_file => $update_details ) {
-			if ( ! isset($plugins[ $plugin_file ]) ) {
+	if ( $time_not_changed ) {
+		$plugin_changed = false;
+		foreach ( $plugins as $file => $p ) {
+			$new_option->checked[ $file ] = $p['Version'];
+
+			if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
 				$plugin_changed = true;
-				break;
+		}
+
+		if ( isset ( $current->response ) && is_array( $current->response ) ) {
+			foreach ( $current->response as $plugin_file => $update_details ) {
+				if ( ! isset($plugins[ $plugin_file ]) ) {
+					$plugin_changed = true;
+					break;
+				}
 			}
 		}
-	}
 
-	// Bail if we've checked in the last 12 hours and if nothing has changed
-	if ( $time_not_changed && !$plugin_changed )
-		return false;
+		// Bail if we've checked recently and if nothing has changed
+		if ( ! $plugin_changed )
+			return false;
+	}
 
 	// Update last_checked for current to prevent multiple blocking requests if request hangs
 	$current->last_checked = time();
@@ -222,10 +242,6 @@
 	if ( ! is_object($last_update) )
 		$last_update = new stdClass;
 
-	// Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
-	$timeout = in_array( current_filter(), array( 'load-themes.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
-	$time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
-
 	$themes = array();
 	$checked = array();
 	$exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot');
@@ -246,25 +262,43 @@
 		}
 	}
 
-	$theme_changed = false;
-	foreach ( $checked as $slug => $v ) {
-		$update_request->checked[ $slug ] = $v;
-
-		if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
-			$theme_changed = true;
+	// Check for update on a different schedule, depending on the page.
+	switch ( current_filter() ) {
+		case 'load-update-core.php' :
+			$timeout = 60; // 1 min
+			break;
+		case 'load-plugins.php' :
+		case 'load-update.php' :
+			$timeout = 3600; // 1 hour
+			break;
+		default :
+			$timeout = 43200; // 12 hours
 	}
+	
+	$time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
+
+	if ( $time_not_changed ) {
+		$theme_changed = false;
+		foreach ( $checked as $slug => $v ) {
+			$update_request->checked[ $slug ] = $v;
 
-	if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
-		foreach ( $last_update->response as $slug => $update_details ) {
-			if ( ! isset($checked[ $slug ]) ) {
+			if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
 				$theme_changed = true;
-				break;
+		}
+
+		if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
+			foreach ( $last_update->response as $slug => $update_details ) {
+				if ( ! isset($checked[ $slug ]) ) {
+					$theme_changed = true;
+					break;
+				}
 			}
 		}
-	}
 
-	if ( $time_not_changed && !$theme_changed )
-		return false;
+		// Bail if we've checked recently and if nothing has changed
+		if ( ! $theme_changed )
+			return false;
+	}
 
 	// Update last_checked for current to prevent multiple blocking requests if request hangs
 	$last_update->last_checked = time();
