Index: wp-includes/cache.php
===================================================================
--- wp-includes/cache.php	(revision 19905)
+++ wp-includes/cache.php	(working copy)
@@ -103,13 +103,14 @@
  * @param int|string $key What the contents in the cache are called
  * @param string $group Where the cache contents are grouped
  * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false)
+ * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value.
  * @return bool|mixed False on failure to retrieve contents or the cache
  *		contents on success
  */
-function wp_cache_get( $key, $group = '', $force = false ) {
+function wp_cache_get( $key, $group = '', $force = false, &$found = null ) {
 	global $wp_object_cache;
 
-	return $wp_object_cache->get( $key, $group, $force );
+	return $wp_object_cache->get( $key, $group, $force, $found );
 }
 
 /**
@@ -272,7 +273,7 @@
 	/**
 	 * Adds data to the cache if it doesn't already exist.
 	 *
-	 * @uses WP_Object_Cache::get Checks to see if the cache already has data.
+	 * @uses WP_Object_Cache::_exists Checks to see if the cache already has data.
 	 * @uses WP_Object_Cache::set Sets the data after the checking the cache
 	 *		contents existence.
 	 *
@@ -288,10 +289,10 @@
 		if ( wp_suspend_cache_addition() )
 			return false;
 
-		if ( empty ($group) )
+		if ( empty( $group ) )
 			$group = 'default';
 
-		if (false !== $this->get($key, $group))
+		if ( $this->_exists($key, $group) )
 			return false;
 
 		return $this->set($key, $data, $group, $expire);
@@ -322,7 +323,7 @@
 	 * @return false|int False on failure, the item's new value on success.
 	 */
 	function decr( $key, $offset = 1, $group = 'default' ) {
-		if ( ! isset( $this->cache[ $group ][ $key ] ) )
+		if ( ! $this->_exists( $key, $group ) )
 			return false;
 
 		if ( ! is_numeric( $this->cache[ $group ][ $key ] ) )
@@ -354,13 +355,13 @@
 	 * @return bool False if the contents weren't deleted and true on success
 	 */
 	function delete($key, $group = 'default', $force = false) {
-		if (empty ($group))
+		if ( empty( $group ) )
 			$group = 'default';
 
-		if (!$force && false === $this->get($key, $group))
+		if ( ! $force && ! $this->_exists( $key, $group ) )
 			return false;
 
-		unset ($this->cache[$group][$key]);
+		unset( $this->cache[$group][$key] );
 		return true;
 	}
 
@@ -394,11 +395,12 @@
 	 * @return bool|mixed False on failure to retrieve contents or the cache
 	 *		contents on success
 	 */
-	function get( $key, $group = 'default', $force = false) {
-		if ( empty ($group) )
+	function get( $key, $group = 'default', $force = false, &$found = null ) {
+		if ( empty( $group ) )
 			$group = 'default';
 
-		if ( isset ($this->cache[$group][$key]) ) {
+		if ( $this->_exists( $key, $group ) ) {
+			$found = true;
 			$this->cache_hits += 1;
 			if ( is_object($this->cache[$group][$key]) )
 				return clone $this->cache[$group][$key];
@@ -406,6 +408,7 @@
 				return $this->cache[$group][$key];
 		}
 
+		$found = false;
 		$this->cache_misses += 1;
 		return false;
 	}
@@ -421,7 +424,10 @@
 	 * @return false|int False on failure, the item's new value on success.
 	 */
 	function incr( $key, $offset = 1, $group = 'default' ) {
-		if ( ! isset( $this->cache[ $group ][ $key ] ) )
+		if ( empty( $group ) )
+			$group = 'default';
+
+		if ( ! $this->_exists( $key, $group ) )
 			return false;
 
 		if ( ! is_numeric( $this->cache[ $group ][ $key ] ) )
@@ -450,10 +456,10 @@
 	 * @return bool False if not exists, true if contents were replaced
 	 */
 	function replace($key, $data, $group = 'default', $expire = '') {
-		if (empty ($group))
+		if ( empty( $group ) )
 			$group = 'default';
 
-		if ( false === $this->get($key, $group) )
+		if ( ! $this->_exists( $key, $group ) )
 			return false;
 
 		return $this->set($key, $data, $group, $expire);
@@ -493,12 +499,9 @@
 	 * @return bool Always returns true
 	 */
 	function set($key, $data, $group = 'default', $expire = '') {
-		if ( empty ($group) )
+		if ( empty( $group ) )
 			$group = 'default';
 
-		if ( null === $data )
-			$data = '';
-
 		if ( is_object($data) )
 			$data = clone $data;
 
@@ -527,6 +530,15 @@
 	}
 
 	/**
+	 * Utility function to determine whether a key exists in the cache.
+	 * @access private
+	 */
+	function _exists($key, $group) {
+		return is_array( $this->cache[$group] ) && array_key_exists( $key, $this->cache[$group] );
+	}
+
+
+	/**
 	 * Sets up object properties; PHP 5 style constructor
 	 *
 	 * @since 2.0.8
