Index: /Users/simon/Projects/WordPress-Bleeding/site/wp-includes/taxonomy.php
===================================================================
--- /Users/simon/Projects/WordPress-Bleeding/site/wp-includes/taxonomy.php	(revision 16465)
+++ /Users/simon/Projects/WordPress-Bleeding/site/wp-includes/taxonomy.php	(working copy)
@@ -1468,11 +1468,11 @@
 }
 
 /**
- * Will unlink the term from the taxonomy.
+ * Will unlink the object from the taxonomy or taxonomies.
  *
- * Will remove the term's relationship to the taxonomy, not the term or taxonomy
- * itself. The term and taxonomy will still exist. Will require the term's
- * object ID to perform the operation.
+ * Will remove all relationships between the object and any terms in 
+ * a particular taxonomy or taxonomies. Does not remove the term or 
+ * taxonomy itself.
  *
  * @package WordPress
  * @subpackage Taxonomy
@@ -1987,6 +1987,49 @@
 }
 
 /**
+ * Unrelates the object(s) from the specified term(s).
+ * 
+ * @package WordPress
+ * @subpackage Taxonomy
+ * @since 2.3.1
+ * @uses wp_update_term_count To update the term counts after the relationships have been removed
+ * 
+ * @param integer|array $object_ids Either an integer, or an array of object ids to be unrelated from the terms
+ * @param integer|array $term_ids Either an integer, or an array of term ids to be unrelated from the objects
+ * @param string $taxonomy The taxonomy for the term
+ * @return void
+ **/
+function wp_unset_object_terms( $object_ids, $term_ids, $taxonomy ) {
+	global $wpdb;
+
+	if ( ! is_array( $object_ids ) )
+		$object_ids = (array) $object_ids;
+	if ( ! is_array( $term_ids ) )
+		$term_ids = (array) $term_ids;
+	
+	// N.B. get_terms will sanitise the $term_ids
+	$terms = get_terms( $taxonomy, array( 'include' => $term_ids ) );
+	$tt_ids = array();
+	// Note: There may be some way to use array_uintersect_uassoc to extract
+	// the $tt_ids without using a loop, but sadly it's PHP5 only.
+	foreach ( $terms as $term )
+		$tt_ids[] = $term->term_taxonomy_id;
+	$in_tt_ids = implode( ',', $tt_ids );
+	
+	// Sanitise the $object_ids, goodness knows where they've been
+	array_walk( $object_ids, create_function( '& $id', '$id = intval( $id );' ) );
+	$in_object_ids = implode( ',', $object_ids );
+
+	foreach ( $object_ids as $object_id )
+		do_action( 'delete_term_relationships', $object_id, $tt_ids );
+	// Note: Preparing is pointless in this case, but the inputs are sanitary
+	$wpdb->query( "DELETE FROM $wpdb->term_relationships WHERE object_id IN ( $in_object_ids ) AND term_taxonomy_id IN ($in_tt_ids)" );
+	foreach ( $object_ids as $object_id )
+		do_action( 'deleted_term_relationships', $object_id, $tt_ids );
+	wp_update_term_count( $tt_ids, $taxonomy );
+}
+
+/**
  * Will make slug unique, if it isn't already.
  *
  * The $slug has to be unique global to every taxonomy, meaning that one
