diff --git a/taxonomy_entity_index.module b/taxonomy_entity_index.module
index 1ed7bbc..e26417e 100644
--- a/taxonomy_entity_index.module
+++ b/taxonomy_entity_index.module
@@ -1,6 +1,30 @@
 <?php
 
 /**
+ * Implements hook_menu().
+ */
+function taxonomy_entity_index_menu() {
+  $items = array();
+  $items['admin/config/system/taxonomy_entity_index'] = array(
+    'title' => 'Taxonomy entity index',
+    'description' => 'Manage the Taxonomy entity index.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('taxonomy_entity_index_simple_form'),
+    'access callback' => TRUE,
+  );
+  return $items;
+}
+
+/**
+ * Implements hook_admin_paths().
+ */
+function taxonomy_entity_index_admin_paths() {
+  $paths = array(
+    'admin/config/system/taxonomy_entity_index' => TRUE,
+  );
+}
+
+/**
  * Implements hook_field_delete_instance().
  */
 function taxonomy_entity_index_field_delete_instance($instance) {
@@ -203,3 +227,92 @@ function taxonomy_entity_index_reindex_entity_type($entity_type, &$context) {
     $context['finished'] = ($context['sandbox']['progress'] >= $context['sandbox']['max']);
   }
 }
+
+/**
+ * Form builder for the batch reindexing form.
+ */
+function taxonomy_entity_index_simple_form() {
+  // Retrieve a list of all entity types.
+  $entities = module_invoke_all('entity_info');
+  foreach ($entities as $key => $entity) {
+    $options[$key] = $entity['label'];
+  }
+  $form['types'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Entity types'),
+    '#options' => $options,
+    '#description' => t('Re-index all terms for the selected entity types.'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => 'Rebuild Index',
+  );
+  return $form;
+}
+
+/**
+ * Validation callback for the batch reindexing form.
+ *
+ * @see taxonomy_entity_index_simple_form()
+ */
+function taxonomy_entity_index_simple_form_validate($form, &$form_state) {
+  if (!array_filter($form_state['values']['types'])) {
+    form_set_error('', t('You must select at least one entity type.'));
+  }
+}
+
+/**
+ * Form submit handler for the batch reindexing form.  Processes the batch.
+ *
+ * @see taxonomy_entity_index_simple_form()
+ * @see taxonomy_entity_index_reindex()
+ * @see taxonomy_entity_index_reindex_finished()
+ */
+function taxonomy_entity_index_simple_form_submit($form, &$form_state) {
+  // Set a batch operation for each selected entity type.
+  $batch = taxonomy_entity_index_reindex(array_filter($form_state['values']['types']));
+
+  // Execute the batch.
+  batch_set($batch);
+}
+
+/**
+ * Composes the list of batch operations.
+ *
+ * @param $types
+ *   An array of entity types from the user's form submission.
+ *
+ * @return
+ *   An array of batch operations.
+ *
+ * @see taxonomy_entity_index_simple_form()
+ * @see taxonomy_entity_index_reindex_entity_type()
+ */
+function taxonomy_entity_index_reindex($types) {
+  // Add an operation for each entity type.
+  foreach ($types as $type) {
+    $operations[] = array('taxonomy_entity_index_reindex_entity_type', array($type));
+  }
+  $batch = array(
+    'operations' => $operations,
+    'finished' => 'taxonomy_entity_index_reindex_finished',
+  );
+  return $batch;
+}
+
+/**
+ * Batch 'finished' callback.
+ *
+ * @see taxonomy_entity_index_simple_form()
+ * @see taxonomy_entity_index_reindex_entity_type()
+ */
+function taxonomy_entity_index_reindex_finished($success, $results, $operations) {
+  if ($success) {
+    drupal_set_message(t('Taxonomy entity index rebuilt successfully.'));
+  }
+  else {
+    // An error occurred.
+    $error_operation = reset($operations);
+    drupal_set_message(t('An error occurred while processing the operation.'));
+  }
+}
