Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 21656)
+++ wp-includes/taxonomy.php	(working copy)
@@ -2052,9 +2052,25 @@
 	$name = stripslashes($name);
 	$description = stripslashes($description);
 
-	if ( empty($slug) )
-		$slug = sanitize_title($name);
+	if ( empty( $slug ) ) {
+		$name = trim( $name );
+		
+		// check for a term like "$$$" so it isn't repeatedly added
+		if ( preg_match_all( '#[^:alnum:]#', $name, $matches ) && count( $matches[0] ) === strlen( $name ) ) {
+			$exists = $wpdb->get_row( $wpdb->prepare( "SELECT term_id, slug FROM $wpdb->terms WHERE name = %s", $name ) );
+			if ( ! empty( $exists ) ) {
+				if ( term_exists( $exists->term_id, $taxonomy ) )
+					return new WP_Error( 'term_exists', __( 'A term with the name provided already exists.' ) );
+				
+				// use the existing slug or the term will never match in term_exists
+				$slug = $exists->slug;
+			}
 
+		} else {
+			$slug = sanitize_title( $name );
+		}
+	}
+
 	$term_group = 0;
 	if ( $alias_of ) {
 		$alias = $wpdb->get_row( $wpdb->prepare( "SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $alias_of) );
