diff -upN old/pathauto.inc new/pathauto.inc
--- old/pathauto.inc	2007-08-26 09:55:23.000000000 -0700
+++ new/pathauto.inc	2007-08-27 02:52:31.000000000 -0700
@@ -156,90 +156,95 @@ function pathauto_cleanstring($string) {
  *   The alias that was created
  */
 function pathauto_create_alias($module, $op, $placeholders, $src, $type = NULL) {
-  if (($op != 'bulkupdate') and variable_get('pathauto_verbose', FALSE)) {
-    $verbose = TRUE;
-  } 
-  else {
-    $verbose = FALSE;
-  }
+  // Proceed, unless user opts for a manual alias.
+  // Should probably use form_values rather than _POST. Not sure how.
+  if ($_POST['pathauto']) {
+
+    if (($op != 'bulkupdate') and variable_get('pathauto_verbose', FALSE)) {
+      $verbose = TRUE;
+    } 
+    else {
+      $verbose = FALSE;
+    }
 
-  // Retrieve and apply the pattern for this content type
-  $pattern = '';
-  if ($type) {
-    $pattern = drupal_strtolower(variable_get('pathauto_'. $module .'_'. $type .'_pattern', ''));
-  }
-  if (!trim($pattern)) {
-    $pattern = drupal_strtolower(variable_get('pathauto_'. $module .'_pattern', ''));
-  }
-  
-  // No pattern? Do nothing (otherwise we may blow away existing aliases...)
-  if (!trim($pattern)) {
-    return '';
-  }
+    // Retrieve and apply the pattern for this content type
+    $pattern = '';
+    if ($type) {
+      $pattern = drupal_strtolower(variable_get('pathauto_'. $module .'_'. $type .'_pattern', ''));
+    }
+    if (!trim($pattern)) {
+      $pattern = drupal_strtolower(variable_get('pathauto_'. $module .'_pattern', ''));
+    }
+
+    // No pattern? Do nothing (otherwise we may blow away existing aliases...)
+    if (!trim($pattern)) {
+      return '';
+    }
 
-  // Special handling when updating an item which is already aliased.
-  $pid = NULL;
-  if ($op == 'update' or $op == 'bulkupdate') {
-    $result = db_query("SELECT pid, dst FROM {url_alias} WHERE src='%s'", $src);
-    if ($data = db_fetch_object($result)) {
-      // The item is already aliased, check what to do...
-      switch (variable_get('pathauto_update_action', 2)) {
-        // Do nothing
-        case 0:
-          return '';
-        // Add new alias in addition to old one
-        case 1:
-          $oldalias = $data->dst;
-          break;
-        // Replace old alias - remember the pid to update
-        case 2:
-          $pid = $data->pid;
-          $oldalias = $data->dst;
-          break;
-        default:
-          break;
+    // Special handling when updating an item which is already aliased.
+    $pid = NULL;
+    if ($op == 'update' or $op == 'bulkupdate') {
+      $result = db_query("SELECT pid, dst FROM {url_alias} WHERE src='%s'", $src);
+      if ($data = db_fetch_object($result)) {
+        // The item is already aliased, check what to do...
+        switch (variable_get('pathauto_update_action', 2)) {
+          // Do nothing
+          case 0:
+            return '';
+          // Add new alias in addition to old one
+          case 1:
+            $oldalias = $data->dst;
+            break;
+          // Replace old alias - remember the pid to update
+          case 2:
+            $pid = $data->pid;
+            $oldalias = $data->dst;
+            break;
+          default:
+            break;
+        }
       }
     }
-  }
 
-  // Replace the placeholders with the values provided by the module,
-  // and lower-case the result
-  
-  $alias = str_replace($placeholders['tokens'], $placeholders['values'], $pattern);
-  $alias = drupal_strtolower($alias);
-  
-  // Two or more slashes should be collapsed into one
-  $alias = preg_replace("/\/+/", "/", $alias);
-  
-  // Trim any leading or trailing slashes
-  $alias = preg_replace("/^\/|\/+$/", "", $alias);
+    // Replace the placeholders with the values provided by the module,
+    // and lower-case the result
 
-  $maxlength = min(variable_get('pathauto_max_length', 100), 128);
-  $alias = drupal_substr($alias, 0, $maxlength);
+    $alias = str_replace($placeholders['tokens'], $placeholders['values'], $pattern);
+    $alias = drupal_strtolower($alias);
 
-  // If the alias already exists, generate a new variant
-  $separator = variable_get('pathauto_separator', '-');
-  if (_pathauto_alias_exists($alias, $src)) {
-    for ($i = 0; _pathauto_alias_exists($alias . $separator . $i, $src); $i++) {
-    }
-    // Make room for the sequence number
-    $alias = drupal_substr($alias, 0, $maxlength - 1 -($i/10 + 1));
-    $alias = $alias . $separator . $i;
-  }
+    // Two or more slashes should be collapsed into one
+    $alias = preg_replace("/\/+/", "/", $alias);
 
-  // If $pid is NULL, a new alias is created - otherwise, the existing
-  // alias for the designated src is replaced
-  _pathauto_set_alias($src, $alias, $pid, $verbose, $oldalias);
-
-  // Also create a related feed alias if requested, and if supported
-  // by the module
-  if (variable_get('pathauto_'. $module .'_applytofeeds', FALSE)) {
-    $feedappend = variable_get('pathauto_'. $module .'_supportsfeeds', '');
-    // Handle replace case (get existing pid)
-    _pathauto_set_alias("$src/$feedappend", "$alias/feed", NULL, $verbose);
-  }
+    // Trim any leading or trailing slashes
+    $alias = preg_replace("/^\/|\/+$/", "", $alias);
+
+    $maxlength = min(variable_get('pathauto_max_length', 100), 128);
+    $alias = drupal_substr($alias, 0, $maxlength);
 
-  return $alias;
+    // If the alias already exists, generate a new variant
+    $separator = variable_get('pathauto_separator', '-');
+    if (_pathauto_alias_exists($alias, $src)) {
+      for ($i = 0; _pathauto_alias_exists($alias . $separator . $i, $src); $i++) {
+      }
+      // Make room for the sequence number
+      $alias = drupal_substr($alias, 0, $maxlength - 1 -($i/10 + 1));
+      $alias = $alias . $separator . $i;
+    }
+
+    // If $pid is NULL, a new alias is created - otherwise, the existing
+    // alias for the designated src is replaced
+    _pathauto_set_alias($src, $alias, $pid, $verbose, $oldalias);
+
+    // Also create a related feed alias if requested, and if supported
+    // by the module
+    if (variable_get('pathauto_'. $module .'_applytofeeds', FALSE)) {
+      $feedappend = variable_get('pathauto_'. $module .'_supportsfeeds', '');
+      // Handle replace case (get existing pid)
+      _pathauto_set_alias("$src/$feedappend", "$alias/feed", NULL, $verbose);
+    }
+
+    return $alias;
+  }
 }
 
 /**
diff -upN old/pathauto.js new/pathauto.js
--- old/pathauto.js	1969-12-31 16:00:00.000000000 -0800
+++ new/pathauto.js	2007-08-27 04:03:46.000000000 -0700
@@ -0,0 +1,24 @@
+
+(function($) {
+  $(function() {
+    if ($("#edit-pathauto").attr("checked")) {
+      // Disable input and hide its description.
+      $("#edit-path").attr("disabled","disabled");
+      $("//#edit-path ~ div[@class=description]").hide(0);
+    }
+    $("#edit-pathauto").bind("click", function() {
+      if ($("#edit-pathauto").attr("checked")) {
+        // Auto-alias checked; disable input.
+        $("#edit-path").attr("disabled","disabled");
+        $("//#edit-path ~ div[@class=description]").slideUp('slow');
+      }
+      else {
+        // Auto-alias unchecked; enable input.
+        $("#edit-path").removeAttr("disabled");
+        $("#edit-path")[0].focus();
+        $("//#edit-path ~ div[@class=description]").slideDown('slow');
+      }
+    });
+  });
+})(jQuery);
+
diff -upN old/pathauto.module new/pathauto.module
--- old/pathauto.module	2007-08-26 09:55:37.000000000 -0700
+++ new/pathauto.module	2007-08-27 02:43:52.000000000 -0700
@@ -349,21 +349,27 @@ function pathauto_nodeapi(&$node, $op, $
 /**
  * Implementation of hook_form_alter().
  * 
- * A helpful hint to the users with access to alias creation (pathauto
- * will be invisible to other users). Inserted into the path module's
- * fieldset in the node form
+ * 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($formid, &$form) {
-  if (isset($form['#attributes']['id']) && ($form['#attributes']['id'] == 'node-form')) {
+  if (isset($form['#id']) && ($form['#id'] == 'node-form')) {
     if (user_access('create url aliases')) {
-      $output .= t('An alias will be automatically generated from the title and other node attributes, in addition to any alias manually provided above.');
+      $output .= t('An alias will be generated for you. If you wish to create your own alias below, untick this option.');
       if (user_access('administer pathauto')) {
-        $output .= t(' To control the format of the generated aliases, see the <a href="admin/settings/pathauto">pathauto settings</a>.');
+        $output .= t(' To control the format of the generated aliases, see the <a href="/admin/settings/pathauto">Pathauto settings</a>.');
       }
     }
     if ($output) {
-      $form['path']['pathauto'] = array('#type' => 'item',
-        '#description' => $output);
+      drupal_add_js(drupal_get_path('module', 'pathauto') . '/pathauto.js');
+
+      $form['path']['pathauto'] = array('#type' => 'checkbox',
+        '#title' => t('Automatic alias'),
+        '#default_value' => TRUE,
+        '#description' => $output,
+        '#weight' => 0
+      );
     }
   }
 }
