diff --git a/pathauto.module b/pathauto.module
index 0efb7cc..2a699cb 100644
--- a/pathauto.module
+++ b/pathauto.module
@@ -246,6 +246,92 @@ function pathauto_field_attach_delete_bundle($entity_type, $bundle, $instances)
   }
 }
 
+/**
+ * Implements hook_field_attach_form().
+ *
+ * Add the automatic alias form elements to an existing path form fieldset.
+ */
+function pathauto_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {
+  list($id, , $bundle) = entity_extract_ids($entity_type, $entity);
+
+  if (!isset($form['path'])) {
+    // This entity must be supported by core's path.module first.
+    // @todo Investigate removing this and supporting all fieldable entities.
+    return;
+  }
+  else {
+    // Taxonomy terms do not have an actual fieldset for path settings.
+    // Merge in the defaults.
+    $form['path'] += array(
+      '#type' => 'fieldset',
+      '#title' => t('URL path settings'),
+      '#collapsible' => TRUE,
+      '#collapsed' => empty($form['path']['alias']),
+      '#group' => 'additional_settings',
+      '#attributes' => array(
+        'class' => array('path-form'),
+      ),
+      '#access' => user_access('create url aliases') || user_access('administer url aliases'),
+      '#weight' => 30,
+      '#tree' => TRUE,
+      '#element_validate' => array('path_form_element_validate'),
+    );
+  }
+
+  $pattern = pathauto_pattern_load_by_entity($entity_type, $bundle, $langcode);
+  if (!$pattern) {
+    return;
+  }
+
+  if (!isset($entity->path['pathauto'])) {
+    if (!empty($id)) {
+      module_load_include('inc', 'pathauto');
+      $uri = entity_uri($entity_type, $entity);
+      $path = drupal_get_path_alias($uri['path'], $langcode);
+      $pathauto_alias = pathauto_create_alias($entity_type, 'return', $uri['path'], array($entity_type => $entity), $bundle, $langcode);
+      $entity->path['pathauto'] = ($path != $uri['path'] && $path == $pathauto_alias);
+    }
+    else {
+      $entity->path['pathauto'] = TRUE;
+    }
+  }
+
+  // Add JavaScript that will disable the path textfield when the automatic
+  // alias checkbox is checked.
+  $form['path']['alias']['#states']['!enabled']['input[name="path[pathauto]"]'] = array('checked' => TRUE);
+
+  // Override path.module's vertical tabs summary.
+  $form['path']['#attached']['js'] = array(
+    'vertical-tabs' => drupal_get_path('module', 'pathauto') . '/pathauto.js'
+  );
+
+  $form['path']['pathauto'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Automatic alias'),
+    '#default_value' => $entity->path['pathauto'],
+    '#description' => t('An alias will be generated for you. If you wish to create your own alias below, uncheck this option.'),
+    '#weight' => -1,
+  );
+
+  if (user_access('administer pathauto')) {
+    $form['path']['pathauto']['#description'] .= ' ' . t('To control the format of the generated aliases, see the <a href="@url-patterns">URL alias patterns</a>.', array('@url-patterns' => url('admin/config/search/path/patterns')));
+  }
+
+  if ($entity->path['pathauto'] && !empty($entity->old_alias) && empty($entity->path['alias'])) {
+    $form['path']['alias']['#default_value'] = $entity->old_alias;
+    $entity->path['alias'] = $entity->old_alias;
+  }
+
+  // For Pathauto to remember the old alias and prevent the Path module from
+  // deleting it when Pathauto wants to preserve it.
+  if (!empty($entity->path['alias'])) {
+    $form['path']['old_alias'] = array(
+      '#type' => 'value',
+      '#value' => $entity->path['alias'],
+    );
+  }
+}
+
 //==============================================================================
 // Some node related functions.
 
@@ -290,75 +376,10 @@ function pathauto_node_delete($node) {
 }
 
 /**
- * Implements hook_form_alter().
- *
- * This allows alias creators to override Pathauto and specify their
- * own aliases (Pathauto will be invisible to other users). Inserted
- * into the path module's fieldset in the node form.
- */
-function pathauto_form_alter(&$form, &$form_state, $form_id) {
-  // Process only node forms.
-  if (!empty($form['#node_edit_form'])) {
-    $node = $form['#node'];
-
-    // Find if there is an automatic alias pattern for this content type.
-    $language = isset($node->language) ? $node->language : LANGUAGE_NONE;
-    $pattern = pathauto_pattern_load_by_entity('node', $node->type, $language);
-
-    // If there is a pattern, show the automatic alias checkbox.
-    if ($pattern) {
-      if (!isset($node->path['pathauto'])) {
-        if (!empty($node->nid)) {
-          // If this is not a new node, compare it's current alias to the
-          // alias that would be genereted by pathauto. If they are the same,
-          // then keep the automatic alias enabled.
-          module_load_include('inc', 'pathauto');
-          $uri = entity_uri('node', $node);
-          $path = drupal_get_path_alias($uri['path'], $language);
-          $pathauto_alias = pathauto_create_alias('node', 'return', $uri['path'], array('node' => $node), $node->type, $node->language);
-          $node->path['pathauto'] = $path != $uri['path'] && $path == $pathauto_alias;
-        }
-        else {
-          // If this is a new node, enable the automatic alias.
-          $node->path['pathauto'] = TRUE;
-        }
-      }
-
-      // Add JavaScript that will disable the path textfield when the automatic
-      // alias checkbox is checked.
-      $form['path']['alias']['#states']['!enabled']['input[name="path[pathauto]"]'] = array('checked' => TRUE);
-
-      // Override path.module's vertical tabs summary.
-      $form['path']['#attached']['js'] = array(
-        'vertical-tabs' => drupal_get_path('module', 'pathauto') . '/pathauto.js'
-      );
-
-      $form['path']['pathauto'] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Automatic alias'),
-        '#default_value' => $node->path['pathauto'],
-        '#description' => t('An alias will be generated for you. If you wish to create your own alias below, uncheck this option.'),
-        '#weight' => -1,
-      );
-
-      if (user_access('administer pathauto')) {
-        $form['path']['pathauto']['#description'] .= ' ' . t('To control the format of the generated aliases, see the <a href="@url-patterns">URL alias patterns</a>.', array('@url-patterns' => url('admin/config/search/path/patterns')));
-      }
-
-      if ($node->path['pathauto'] && !empty($node->old_alias) && empty($node->path['alias'])) {
-        $form['path']['alias']['#default_value'] = $node->old_alias;
-        $node->path['alias'] = $node->old_alias;
-      }
-
-      // For Pathauto to remember the old alias and prevent the Path-module from deleteing it when Pathauto wants to preserve it
-      if (!empty($node->path['alias'])) {
-        $form['path']['old_alias'] = array(
-          '#type' => 'value',
-          '#value' => $node->path['alias'],
-        );
-      }
-    }
-  }
+ * Implements hook_form_BASE_FORM_ID_alter().
+ */
+function pathauto_form_node_form_alter(&$form, &$form_state) {
+  pathauto_field_attach_form('node', $form_state['node'], $form, $form_state, $node->language);
 }
 
 /**
@@ -449,6 +470,14 @@ function pathauto_taxonomy_term_delete($term) {
 }
 
 /**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function pathauto_form_taxonomy_form_term_alter(&$form, $form_state) {
+  $langcode = isset($form_state['term']->language) ? $form_state['term']->language : LANGUAGE_NONE;
+  pathauto_field_attach_form('taxonomy_term', $form_state['term'], $form, $form_state, $langcode);
+}
+
+/**
  * Update the URL aliases for an individual taxonomy term.
  *
  * @param $term
