Index: post.php
===================================================================
--- post.php	(revision 15603)
+++ post.php	(working copy)
@@ -4089,14 +4089,18 @@
 
 	update_post_cache($posts);
 
-	$post_ids = array();
-	foreach ( $posts as $post )
+	$post_ids = $post_types = array();
+	foreach ( $posts as $post ) {
 		$post_ids[] = $post->ID;
+		$post_types[] = $post->post_type;
+	}
 
 	if ( empty($post_type) )
-		$post_type = 'post';
+		$post_type = array_unique( $post_types );
+	else if ( 'any' == $post_type )
+		$post_type = array_unique( $post_types );
 
-	if ( !is_array($post_type) && 'any' != $post_type && $update_term_cache )
+	if ( $update_term_cache )
 		update_object_term_cache($post_ids, $post_type);
 
 	if ( $update_meta_cache )
Index: taxonomy.php
===================================================================
--- taxonomy.php	(revision 15603)
+++ taxonomy.php	(working copy)
@@ -2214,7 +2214,8 @@
  *
  * @param string|array $object_ids Single or list of term object ID(s)
  * @param array|string $object_type The taxonomy object type
- * @return null|bool Null value is given with empty $object_ids. False if
+ * @return null|bool Null value is given with empty $object_ids. False if all
+ * terms for each object are already cached.
  */
 function update_object_term_cache($object_ids, $object_type) {
 	if ( empty($object_ids) )
@@ -2224,8 +2225,10 @@
 		$object_ids = explode(',', $object_ids);
 
 	$object_ids = array_map('intval', $object_ids);
+	$taxonomies = array();
 
-	$taxonomies = get_object_taxonomies($object_type);
+	foreach ( (array) $object_type as $type )
+		$taxonomies = array_merge( $taxonomies, get_object_taxonomies($type) );
 
 	$ids = array();
 	foreach ( (array) $object_ids as $id ) {
