Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.587
diff -u -p -r1.587 taxonomy.module
--- modules/taxonomy/taxonomy.module	23 Apr 2010 07:54:44 -0000	1.587
+++ modules/taxonomy/taxonomy.module	27 Apr 2010 17:42:09 -0000
@@ -565,7 +565,6 @@ function taxonomy_term_delete($tid) {
   return SAVED_DELETED;
 }
 
-
 /**
  * Generate an array for rendering the given term.
  *
@@ -1018,13 +1017,15 @@ function taxonomy_implode_tags($tags, $v
   foreach ($tags as $tag) {
     // Extract terms belonging to the vocabulary in question.
     if (is_null($vid) || $tag->vid == $vid) {
+      // Make sure we have a completed loaded taxonomy term.
+      if (isset($tag->name)) {
+        // Commas and quotes in tag names are special cases, so encode 'em.
+        if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) {
+          $tag->name = '"' . str_replace('"', '""', $tag->name) . '"';
+        }
 
-      // Commas and quotes in tag names are special cases, so encode 'em.
-      if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) {
-        $tag->name = '"' . str_replace('"', '""', $tag->name) . '"';
+        $typed_tags[] = $tag->name;
       }
-
-      $typed_tags[] = $tag->name;
     }
   }
   return implode(', ', $typed_tags);
@@ -1227,7 +1228,6 @@ function taxonomy_field_formatter_view($
       }
       break;
   }
-
   return $element;
 }
 
@@ -1273,6 +1273,8 @@ function taxonomy_field_formatter_prepar
 
     // Iterate through the fieldable entities again to attach the loaded term data.
     foreach ($entities as $id => $entity) {
+	  $rekey = FALSE;
+	
       foreach ($items[$id] as $delta => $item) {
         // Check whether the taxonomy term field instance value could be loaded.
         if (isset($terms[$item['tid']])) {
@@ -1282,8 +1284,14 @@ function taxonomy_field_formatter_prepar
         // Otherwise, unset the instance value, since the term does not exist.
         else {
           unset($items[$id][$delta]);
+          $rekey = TRUE;
         }
       }
+
+      if ($rekey) {
+        // Rekey the items array.
+        $items[$id] = array_values($items[$id]);
+      }
     }
   }
 }
Index: modules/taxonomy/taxonomy.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.test,v
retrieving revision 1.77
diff -u -p -r1.77 taxonomy.test
--- modules/taxonomy/taxonomy.test	20 Apr 2010 09:48:06 -0000	1.77
+++ modules/taxonomy/taxonomy.test	27 Apr 2010 17:42:09 -0000
@@ -422,7 +422,7 @@ class TaxonomyTermTestCase extends Taxon
   /**
    * Test term creation with a free-tagging vocabulary from the node form.
    */
-  function testNodeTermCreation() {
+  function testNodeTermCreationAndDeletion() {
     // Enable tags in the vocabulary.
     $instance = $this->instance;
     $instance['widget'] = array('type' => 'taxonomy_autocomplete');
@@ -446,6 +446,23 @@ class TaxonomyTermTestCase extends Taxon
     foreach ($terms as $term) {
       $this->assertText($term, t('The term was saved and appears on the node page'));
     }
+
+    //Get the created terms.
+    list($term1, $term2, $term3) = taxonomy_get_tree($this->vocabulary->vid);
+
+    // Delete one term.
+    $this->drupalPost('taxonomy/term/' . $term1->tid . '/edit', array(), t('Delete'));
+    $this->drupalPost(NULL, NULL, t('Delete'));
+    $terms = array($term2->name, $term3->name);
+
+    //Get the node.
+    $node = $this->drupalGetNodeByTitle($edit["title"]);
+    $this->drupalGet('node/' . $node->nid);
+
+    foreach ($terms as $term) {
+      $this->assertText($term, t('The term %name appears on the node page after one term %deleted was deleted', array('%name' => $term, '%deleted' => $term1->name)));
+    }
+    $this->assertNoText($term1->name, t('The deleted term %name does not appear on the node page.', array('%name' => $term1->name)));
   }
 
   /**
