Index: modules/taxonomy/taxonomy.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.admin.inc,v
retrieving revision 1.110
diff -u -p -r1.110 taxonomy.admin.inc
--- modules/taxonomy/taxonomy.admin.inc	28 Sep 2010 03:30:37 -0000	1.110
+++ modules/taxonomy/taxonomy.admin.inc	29 Sep 2010 02:57:08 -0000
@@ -163,6 +163,10 @@ function taxonomy_form_vocabulary($form,
       'js' => array(drupal_get_path('module', 'system') . '/system.js', $js_settings),
     ),
   );
+  $form['old_machine_name'] = array(
+    '#type' => 'value',
+    '#value' => $vocabulary->machine_name,
+  );
   $form['description'] = array(
     '#type' => 'textfield',
     '#title' => t('Description'),
@@ -223,12 +227,10 @@ function taxonomy_form_vocabulary_submit
     $form_state['confirm_delete'] = TRUE;
     return;
   }
-  $old_machine_name = $form_state['vocabulary']->machine_name;
+
   $vocabulary = $form_state['vocabulary'];
   entity_form_submit_build_entity('taxonomy_vocabulary', $vocabulary, $form, $form_state);
-  if ($vocabulary->machine_name != $old_machine_name) {
-    field_attach_rename_bundle('taxonomy_term', $old_machine_name, $vocabulary->machine_name);
-  }
+
   switch (taxonomy_vocabulary_save($vocabulary)) {
     case SAVED_NEW:
       drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->name)));
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.607
diff -u -p -r1.607 taxonomy.module
--- modules/taxonomy/taxonomy.module	26 Sep 2010 23:31:36 -0000	1.607
+++ modules/taxonomy/taxonomy.module	29 Sep 2010 02:57:08 -0000
@@ -374,7 +374,6 @@ function taxonomy_admin_vocabulary_title
  * Save a vocabulary given a vocabulary object.
  */
 function taxonomy_vocabulary_save($vocabulary) {
-
   if (!empty($vocabulary->name)) {
     // Prevent leading and trailing spaces in vocabulary names.
     $vocabulary->name = trim($vocabulary->name);
@@ -384,10 +383,17 @@ function taxonomy_vocabulary_save($vocab
     $vocabulary->module = 'taxonomy';
   }
 
+  if (!empty($vocabulary->vid) && !isset($vocabulary->old_machine_name)) {
+    $vocabulary->old_machine_name = db_query("SELECT machine_name FROM {taxonomy_vocabulary} WHERE vid = :vid", array(':vid' => $vocabulary->vid))->fetchField();
+  }
+
   module_invoke_all('taxonomy_vocabulary_presave', $vocabulary);
 
   if (!empty($vocabulary->vid) && !empty($vocabulary->name)) {
     $status = drupal_write_record('taxonomy_vocabulary', $vocabulary, 'vid');
+    if (!empty($vocabulary->old_machine_name) && $vocabulary->old_machine_name != $vocabulary->machine_name) {
+      field_attach_rename_bundle('node', $vocabulary->old_machine_name, $vocabulary->machine_name);
+    }
     module_invoke_all('taxonomy_vocabulary_update', $vocabulary);
     module_invoke_all('entity_update', $vocabulary, 'taxonomy_vocabulary');
   }
