diff --git modules/taxonomy/taxonomy.admin.inc modules/taxonomy/taxonomy.admin.inc
index ae5e85e..c483d4d 100644
--- modules/taxonomy/taxonomy.admin.inc
+++ modules/taxonomy/taxonomy.admin.inc
@@ -941,7 +941,6 @@ function taxonomy_vocabulary_confirm_delete_submit($form, &$form_state) {
   drupal_set_message(t('Deleted vocabulary %name.', array('%name' => $form_state['values']['name'])));
   watchdog('taxonomy', 'Deleted vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
   $form_state['redirect'] = 'admin/structure/taxonomy';
-  cache_clear_all();
   return;
 }
 
diff --git modules/taxonomy/taxonomy.module modules/taxonomy/taxonomy.module
index da5fa6e..295379d 100644
--- modules/taxonomy/taxonomy.module
+++ modules/taxonomy/taxonomy.module
@@ -454,6 +454,18 @@ function taxonomy_vocabulary_delete($vid) {
     module_invoke_all('taxonomy_vocabulary_delete', $vocabulary);
     module_invoke_all('entity_delete', $vocabulary, 'taxonomy_vocabulary');
 
+    // Load all fields from taxonomy module and delete those which are using
+    // this vocabulary.
+    $taxonomy_fields = field_read_fields(array('module' => 'taxonomy'));
+    foreach ($taxonomy_fields as $field_name => $taxonomy_field) {
+      foreach ($taxonomy_field['settings']['allowed_values'] as $allowed_value) {
+        if ($allowed_value['vocabulary'] == $vocabulary->machine_name) {
+          field_delete_field($field_name);
+          break;
+        }
+      }
+    }
+
     cache_clear_all();
     entity_get_controller('taxonomy_vocabulary')->resetCache();
 
diff --git modules/taxonomy/taxonomy.test modules/taxonomy/taxonomy.test
index 8b39414..604909f 100644
--- modules/taxonomy/taxonomy.test
+++ modules/taxonomy/taxonomy.test
@@ -987,6 +987,11 @@ class TaxonomyTermFieldTestCase extends TaxonomyWebTestCase {
     $entity->content = field_attach_view('test_entity', $entity, 'full');
     $this->content = drupal_render($entity->content);
     $this->assertText($term->name, t('Term name is displayed'));
+
+    // Delete the vocabulary and verify that the widget is gone.
+    taxonomy_vocabulary_delete($this->vocabulary->vid);
+    $this->drupalGet('test-entity/add/test-bundle');
+    $this->assertNoFieldByName("{$this->field_name}[$langcode]", '', t('Widget is not displayed'));
   }
 
   /**
