Index: taxonomy.php
===================================================================
--- taxonomy.php	(revision 19099)
+++ taxonomy.php	(working copy)
@@ -1900,8 +1900,29 @@
 	else if ( 'all_with_object_id' == $fields )
 		$select_this = 't.*, tt.*, tr.object_id';
 
-	$query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids) $orderby $order";
+	$pieces = array( 'select', 'join', 'where', 'orderby', 'order' );
 
+	// Setting up initial $query pieces, some are already present
+	$select = $select_this;
+	$join 	= "INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id";
+	$where 	= "WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids)";
+
+	// We applay filters
+	$select 	= apply_filters( 'object_terms_select', $select );
+	$join 		= apply_filters( 'object_terms_join', $join );
+	$where 		= apply_filters( 'object_terms_where', $where );
+	$orderby 	= apply_filters( 'object_terms_orderby', $orderby);
+	$order 		= apply_filters( 'object_terms_order', $order);
+
+	// Filter all clauses at once, for convenience
+	$clauses = (array) apply_filters( 'object_terms_clauses', compact( $pieces ) );
+	foreach ( $pieces as $piece )
+		$$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : '';
+
+	$query = "SELECT $select FROM $wpdb->terms AS t $join $where $orderby $order";
+
+	$query = apply_filters('object_terms_query', $query);
+
 	if ( 'all' == $fields || 'all_with_object_id' == $fields ) {
 		$terms = array_merge($terms, $wpdb->get_results($query));
 		update_term_cache($terms);
