Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 14594)
+++ wp-includes/taxonomy.php	(working copy)
@@ -516,26 +516,37 @@
 	if ( ! is_taxonomy($taxonomy) )
 		return false;
 
-	if ( 'slug' == $field ) {
-		$field = 't.slug';
-		$value = sanitize_title($value);
-		if ( empty($value) )
+	$terms = wp_cache_get_group($taxonomy);
+	$in_cache = false;
+	foreach ( $terms as $term )
+		if ( $term->$field == $value ) {
+			$term = wp_clone($term);
+			$in_cache = true;
+			break;
+		}
+
+	if ( ! $in_cache ) {
+		if ( 'slug' == $field ) {
+			$field = 't.slug';
+			$value = sanitize_title($value);
+			if ( empty($value) )
+				return false;
+		} else if ( 'name' == $field ) {
+			// Assume already escaped
+			$value = stripslashes($value);
+			$field = 't.name';
+		} else {
+			$field = 't.term_id';
+			$value = (int) $value;
+		}
+
+		$term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND $field = %s LIMIT 1", $taxonomy, $value ) );
+		if ( !$term )
 			return false;
-	} else if ( 'name' == $field ) {
-		// Assume already escaped
-		$value = stripslashes($value);
-		$field = 't.name';
-	} else {
-		$field = 't.term_id';
-		$value = (int) $value;
+
+		wp_cache_add($term->term_id, $term, $taxonomy);
 	}
 
-	$term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND $field = %s LIMIT 1", $taxonomy, $value) );
-	if ( !$term )
-		return false;
-
-	wp_cache_add($term->term_id, $term, $taxonomy);
-
 	$term = sanitize_term($term, $taxonomy, $filter);
 
 	if ( $output == OBJECT ) {
Index: wp-includes/cache.php
===================================================================
--- wp-includes/cache.php	(revision 14594)
+++ wp-includes/cache.php	(working copy)
@@ -83,17 +83,34 @@
  * @see WP_Object_Cache::get()
  *
  * @param int|string $id What the contents in the cache are called
- * @param string $flag Where the cache contents are grouped
+ * @param string $group Where the cache contents are grouped
  * @return bool|mixed False on failure to retrieve contents or the cache
  *		contents on success
  */
-function wp_cache_get($id, $flag = '') {
+function wp_cache_get($id, $group = '') {
 	global $wp_object_cache;
 
-	return $wp_object_cache->get($id, $flag);
+	return $wp_object_cache->get($id, $group);
 }
 
 /**
+ * Retrieves the cached items in a group
+ *
+ * @since 3.1.0
+ * @uses $wp_object_cache Object Cache Class
+ * @see WP_Object_Cache::get_group()
+ *
+ * @param string $group Where the cache contents are grouped
+ * @return array List of cached objects
+ */
+function wp_cache_get_group($group) {
+	global $wp_object_cache;
+
+	return $wp_object_cache->get_group($group);
+}
+
+
+/**
  * Sets up Object Cache Global and assigns it.
  *
  * @since 2.0.0
@@ -346,26 +363,44 @@
 	 *		contents on success
 	 */
 	function get($id, $group = 'default') {
-		if ( empty ($group) )
+		if ( empty($group) )
 			$group = 'default';
 
-		if ( isset ($this->cache[$group][$id]) ) {
-			$this->cache_hits += 1;
+		if ( isset($this->cache[$group][$id]) ) {
+			$this->cache_hits++;
 			if ( is_object($this->cache[$group][$id]) )
 				return wp_clone($this->cache[$group][$id]);
 			else
 				return $this->cache[$group][$id];
 		}
 
-		if ( isset ($this->non_existent_objects[$group][$id]) )
+		if ( isset($this->non_existent_objects[$group][$id]) )
 			return false;
 
 		$this->non_existent_objects[$group][$id] = true;
-		$this->cache_misses += 1;
+		$this->cache_misses++;
 		return false;
 	}
 
 	/**
+	 * Retrieves the cached items in a group
+	 *
+	 * @since 3.1.0
+	 *
+	 * @param string $group Where the cache contents are grouped
+	 * @return array List of cached objects
+	 */
+	function get_group($group) {
+		if ( isset($this->cache[$group]) ) {
+			$this->cache_hits++;
+			return $this->cache[$group];
+		}
+
+		$this->cache_misses++;
+		return array();
+	}
+
+	/**
 	 * Replace the contents in the cache, if contents already exist
 	 *
 	 * @since 2.0.0
