diff --git a/betterselect.install b/betterselect.install
index 1b29e39..c12d5a9 100644
--- a/betterselect.install
+++ b/betterselect.install
@@ -7,5 +7,6 @@ function betterselect_uninstall() {
   variable_del('betterselect_scroll');
   variable_del('betterselect_save_lineage');
   variable_del('betterselect_node_form_only');
+  variable_del('betterselect_vocabularies');
 }
 
diff --git a/betterselect.js b/betterselect.js
index c64b9df..098a634 100644
--- a/betterselect.js
+++ b/betterselect.js
@@ -5,3 +5,17 @@ Drupal.behaviors.initBetterSelect = function(context) {
   }).filter(":checked").parent().parent().addClass('hilight');
 }
 
+Drupal.behaviors.betterSelectSettings = function(context) {
+  var $betterSelect = $('#edit-betterselect-wrapper');
+  // Initially show/hide the options.
+  if ($('#edit-multiple').is(':checked')) {
+    $betterSelect.show();
+  }
+  else {
+    $betterSelect.hide();
+  }
+  // Toggle visibility.
+  $('#edit-multiple').click(function() {
+    $betterSelect.slideToggle();
+  });
+}
diff --git a/betterselect.module b/betterselect.module
index 954387b..89b8a74 100644
--- a/betterselect.module
+++ b/betterselect.module
@@ -82,7 +82,11 @@ function betterselect_elements() {
  * Form process callback; translates multiselect fields into checkboxes.
  */
 function betterselect_process($element, $edit, $form_state, $complete_form) {
-  if (isset($element['#multiple']) && $element['#multiple'] == TRUE && !(variable_get('betterselect_node_form_only', FALSE) == TRUE && $complete_form['#id'] != 'node-form')) {
+  // Get saved options.
+  $options = variable_get('betterselect_vocabularies', array());
+  $vid = $element['#parents'][1];
+
+  if ($options[$vid] && isset($element['#multiple']) && $element['#multiple'] == TRUE && !(variable_get('betterselect_node_form_only', FALSE) == TRUE && $complete_form['#id'] != 'node-form')) {
 
     // If we're dealing with taxonomy, fix the option titles.
     if (is_object($element['#options'][0])) {
@@ -199,6 +203,39 @@ function betterselect_form_alter(&$form, $form_state, $form_id) {
     // has to process it before taxonomy module.
     array_unshift($form['#submit'], 'betterselect_taxonomy_form_term_from_checkboxes');
   }
+  elseif ($form_id == 'taxonomy_form_vocabulary') {
+    // Get saved options.
+    $options = variable_get('betterselect_vocabularies', array());
+    $vid = $form['vid']['#value'];
+    // Add option to enable betterselect for this vocabulary.
+    $form['settings']['betterselect'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable better select for this vocabulary.'),
+      '#description' => t('If checked, the dropdown for this vocabulary will be replaced by checkboxes.'),
+      '#required' => FALSE,
+      '#weight' => -1,
+      '#default_value' => isset($options[$vid]) ? $options[$vid] : FALSE,
+    );
+    // Fix weight for some other fields.
+    $form['settings']['tags']['#weight'] = -3;
+    $form['settings']['multiple']['#weight'] = -2;
+    // Add javascript.
+    drupal_add_js(drupal_get_path('module', 'betterselect') . '/betterselect.js');
+    // Add submit handler to save options.
+    array_push($form['#submit'], 'betterselect_taxonomy_form_vocabulary');
+  }
+}
+
+/**
+ * Additional submit handler for the taxonomy vocabulary form.
+ */
+function betterselect_taxonomy_form_vocabulary($form, &$form_state) {
+  // Get saved options.
+  $options = variable_get('betterselect_vocabularies', array());
+  // Set betterselect options for the saved vocabulary.
+  $options[$form_state['values']['vid']] = $form_state['values']['betterselect'];
+  // Save options back to database.
+  variable_set('betterselect_vocabularies', $options);
 }
 
 /**
