Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 15241)
+++ wp-includes/post.php	(working copy)
@@ -366,6 +366,10 @@
 	} elseif ( is_object($post) && empty($post->filter) ) {
 		_get_post_ancestors($post);
 		$_post = sanitize_post($post, 'raw');
+		if ( $cached_post = wp_cache_get($_post->ID, 'posts') ) {
+			if ( ! isset($cached_post->ancestors) )
+				wp_cache_delete($_post->ID, 'posts'); 
+		}
 		wp_cache_add($post->ID, $_post, 'posts');
 	} else {
 		if ( is_object($post) )
@@ -374,7 +378,13 @@
 			$post_id = $post;
 
 		$post_id = (int) $post_id;
-		if ( ! $_post = wp_cache_get($post_id, 'posts') ) {
+		
+		if ( $_post = wp_cache_get($post_id, 'posts') ) {
+			if ( ! isset($_post->ancestors) ) {
+				_get_post_ancestors($_post);
+				wp_cache_set($_post->ID, $_post, 'posts'); 
+			}
+		} elseif {
 			$_post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1", $post_id));
 			if ( ! $_post )
 				return $null;

