Index: /opt/www/eclipsework/WPDev/wp-includes/post.php
===================================================================
--- /opt/www/eclipsework/WPDev/wp-includes/post.php	(revision 7599)
+++ /opt/www/eclipsework/WPDev/wp-includes/post.php	(working copy)
@@ -1469,7 +1469,7 @@
 	if ( empty($tags) )
 		$tags = array();
 	$tags = (is_array($tags)) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") );
-	wp_set_object_terms($post_id, $tags, 'post_tag', $append);
+	wp_set_object_terms($post_id, $tags, 'post_tag', $append, true);
 }
 
 /**
Index: /opt/www/eclipsework/WPDev/wp-includes/taxonomy.php
===================================================================
--- /opt/www/eclipsework/WPDev/wp-includes/taxonomy.php	(revision 7599)
+++ /opt/www/eclipsework/WPDev/wp-includes/taxonomy.php	(working copy)
@@ -735,7 +735,7 @@
  * @param string $taxonomy The taxonomy name to use
  * @return mixed Get the term id or Term Object, if exists.
  */
-function is_term($term, $taxonomy = '') {
+function is_term($term, $taxonomy = '', $allow_match_name = false) {
 	global $wpdb;
 
 	if ( is_int($term) ) {
@@ -743,9 +743,13 @@
 			return 0;
 		$where = $wpdb->prepare( "t.term_id = %d", $term );
 	} else {
+		$tname = $term;
 		if ( '' === $term = sanitize_title($term) )
 			return 0;
 		$where = $wpdb->prepare( "t.slug = %s", $term );
+		if( $allow_match_name ) {
+			$where .= ' OR ' . $wpdb->prepare( "t.name = %s", $tname );
+		}
 	}
 
 	if ( !empty($taxonomy) )
@@ -1248,12 +1252,13 @@
  * @uses $wpdb
  *
  * @param int $object_id The object to relate to.
- * @param array|int|string $term The slug or id of the term.
+ * @param array|int|string $terms The slugs or ids of the terms (or names if $allow_match_names is true).
  * @param array|string $taxonomy The context in which to relate the term to the object.
  * @param bool $append If false will delete difference of terms.
+ * @param bool $allow_match_names If true, $terms can contain term names as well as slugs or IDs
  * @return array|WP_Error Affected Term IDs
  */
-function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {
+function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false, $allow_match_names = false) {
 	global $wpdb;
 
 	$object_id = (int) $object_id;
@@ -1274,7 +1279,7 @@
 		if ( !strlen(trim($term)) )
 			continue;
 
-		if ( !$id = is_term($term, $taxonomy) )
+		if ( !$id = is_term($term, $taxonomy, $allow_match_names) )
 			$id = wp_insert_term($term, $taxonomy);
 		if ( is_wp_error($id) )
 			return $id;

