diff --git wp-includes/taxonomy.php wp-includes/taxonomy.php
index c3cbf36..cf5962f 100644
--- wp-includes/taxonomy.php
+++ wp-includes/taxonomy.php
@@ -2235,10 +2235,13 @@ function wp_update_term( $term_id, $taxonomy, $args = array() ) {
 
 	// Escape data pulled from DB.
 	$term = add_magic_quotes($term);
-
+	
+	// Changed fields
+	$changed = array_keys( array_diff_assoc( $term, $args ) );
+	
 	// Merge old and new args with new args overwriting old ones.
 	$args = array_merge($term, $args);
-
+	
 	$defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => '');
 	$args = wp_parse_args($args, $defaults);
 	$args = sanitize_term($args, $taxonomy, 'db');
@@ -2284,30 +2287,55 @@ function wp_update_term( $term_id, $taxonomy, $args = array() ) {
 		else
 			return new WP_Error('duplicate_term_slug', sprintf(__('The slug &#8220;%s&#8221; is already in use by another term'), $slug));
 	}
-	do_action( 'edit_terms', $term_id );
-	$wpdb->update($wpdb->terms, compact( 'name', 'slug', 'term_group' ), compact( 'term_id' ) );
-	if ( empty($slug) ) {
-		$slug = sanitize_title($name, $term_id);
-		$wpdb->update( $wpdb->terms, compact( 'slug' ), compact( 'term_id' ) );
-	}
-	do_action( 'edited_terms', $term_id );
-
+	
 	$tt_id = $wpdb->get_var( $wpdb->prepare( "SELECT tt.term_taxonomy_id FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = %s AND t.term_id = %d", $taxonomy, $term_id) );
-	do_action( 'edit_term_taxonomy', $tt_id, $taxonomy );
-	$wpdb->update( $wpdb->term_taxonomy, compact( 'term_id', 'taxonomy', 'description', 'parent' ), array( 'term_taxonomy_id' => $tt_id ) );
-	do_action( 'edited_term_taxonomy', $tt_id, $taxonomy );
-
+	$exist_tt = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) AS c FROM $wpdb->term_taxonomy AS tt WHERE term_id = %d", $term_id ) );
+	
+	do_action( 'edit_terms', $term_id );	
 	do_action("edit_term", $term_id, $tt_id, $taxonomy);
 	do_action("edit_$taxonomy", $term_id, $tt_id);
 
-	$term_id = apply_filters('term_id_filter', $term_id, $tt_id);
+	$name_changed = in_array( 'name', $changed );
+	$slug_changed = in_array( 'slug', $changed );
+
+	// create a new term if the current one exists in multiple taxonomies and its name or slug is changed
+	if ( $exist_tt > 1 && ( $name_changed || $slug_changed ) ) {
+		// create a unique slug
+		if ( $slug_changed )
+			$slug = wp_unique_term_slug( $slug, (object) $args );
+		elseif ( $name_changed )
+			$slug = wp_unique_term_slug( sanitize_title( $name ), (object) $args );
+
+		$new_term = wp_insert_term( $name, $taxonomy, compact( 'slug', 'description', 'parent', 'term_group' ) );
+		if ( is_wp_error( $new_term ) )
+			return $new_term;
+		
+		$new_id = $new_term['term_id'];
+		$new_tt_id = $new_term['term_taxonomy_id'];
+		
+		// reassign posts to this new term
+		$wpdb->update( $wpdb->term_relationships, array( 'term_taxonomy_id' => $new_tt_id ), array( 'term_taxonomy_id' => $tt_id ) );
+		wp_update_term_count( $new_tt_id, $taxonomy );
+		wp_delete_term($term_id, $taxonomy);
+		
+		$term_id = $new_id;
+		$tt_id = $new_tt_id;
+	} else {
+		$wpdb->update($wpdb->terms, compact( 'name', 'slug', 'term_group' ), compact( 'term_id' ) );
+		do_action( 'edited_terms', $term_id );
 
+		do_action( 'edit_term_taxonomy', $tt_id, $taxonomy );
+		$wpdb->update( $wpdb->term_taxonomy, compact( 'term_id', 'taxonomy', 'description', 'parent' ), array( 'term_taxonomy_id' => $tt_id ) );
+		do_action( 'edited_term_taxonomy', $tt_id, $taxonomy );
+	}
+
+	$term_id = apply_filters('term_id_filter', $term_id, $tt_id);
 	clean_term_cache($term_id, $taxonomy);
 
 	do_action("edited_term", $term_id, $tt_id, $taxonomy);
 	do_action("edited_$taxonomy", $term_id, $tt_id);
 
-	return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);
+	return array( 'term_id' => $term_id, 'term_taxonomy_id' => $tt_id );
 }
 
 /**
