Only in pathauto: pathauto-238560.patch
diff -urp pathauto/pathauto.inc pathauto_new/pathauto.inc
--- pathauto/pathauto.inc	2008-03-07 00:28:01.000000000 +0800
+++ pathauto_new/pathauto.inc	2008-03-27 14:46:42.000000000 +0800
@@ -239,7 +239,16 @@ function pathauto_create_alias($module, 
     return '';
   }
 
-  if ($module == 'taxonomy') {
+  // Treat this request differently if it has a custom src (CUSTOMSRC)
+  $custom_src = FALSE;
+  if($type && variable_get('pathauto_'. $module .'_'. $type .'_src', NULL)) {
+    $custom_src = TRUE;
+    $defaultsrcprefixes = array('forum/', 'taxonomy/term/', 'node/');
+    $src = str_replace($defaultsrcprefixes, variable_get('pathauto_'. $module .'_'. $type .'_src', ''), $src);
+  }
+
+  // Don't do the following if it has a customsrc (CUSTOMSRC)
+  if ($module == 'taxonomy' && !$custom_src) {
     // Get proper path for term.
     $term_path = taxonomy_term_path(taxonomy_get_term($entity_id));
     if ($term_path != $src) {
@@ -301,7 +310,8 @@ function pathauto_create_alias($module, 
     $feedappend = variable_get('pathauto_'. $module .'_applytofeeds', '');
     
     // For forums and taxonomies, the src doesn't always form the base of the rss feed (ie. image galleries)
-    if ($module == 'taxonomy' || $module == 'forum') {
+    // Don't do the following if the user has already specified a custom src (CUSTOMSRC)
+    if (($module == 'taxonomy' || $module == 'forum') && !$custom_src) {
       $update_data = _pathauto_existing_alias_data("taxonomy/term/$entity_id/$feedappend"); 
       _pathauto_set_alias("taxonomy/term/$entity_id/$feedappend", "$alias/feed", $module, $entity_id, $update_data['pid'], $verbose,$update_data['old_alias']);
     }
diff -urp pathauto/pathauto.module pathauto_new/pathauto.module
--- pathauto/pathauto.module	2008-03-06 05:29:05.000000000 +0800
+++ pathauto_new/pathauto.module	2008-03-27 14:40:52.000000000 +0800
@@ -236,6 +236,8 @@ function pathauto_admin_settings() {
     if (isset($settings->patternitems)) {
       foreach ($settings->patternitems as $itemname => $itemlabel) {
         $variable = 'pathauto_'. $module .'_'. $itemname .'_pattern';
+        //New variable for the custom src (CUSTOMSRC)
+        $variable_src = 'pathauto_'. $module .'_'. $itemname .'_src';
         $description = '';
         if (!count($_POST)) {
           $error = _pathauto_check_pattern(variable_get($variable, $patterndefault), $settings->token_type);
@@ -251,6 +253,14 @@ function pathauto_admin_settings() {
           '#description' => $description,
           '#size' => 65,
           '#maxlength' => 1280);
+        
+        //Allow for custom prefix, text field (CUSTOMSRC)
+        $form[$module][$variable_src] = array('#type' => 'textfield',
+          '#title' => $itemlabel . " (Source Prefix)",
+          '#default_value' => variable_get($variable_src, ''),
+          '#description' => $description,
+          '#size' => 65,
+          '#maxlength' => 1280);
       }
     }
 
diff -urp pathauto/pathauto_taxonomy.inc pathauto_new/pathauto_taxonomy.inc
--- pathauto/pathauto_taxonomy.inc	2008-03-01 04:52:55.000000000 +0800
+++ pathauto_new/pathauto_taxonomy.inc	2008-03-27 14:52:23.000000000 +0800
@@ -49,7 +49,18 @@ function taxonomy_pathauto($op) {
  */ 
 function taxonomy_pathauto_bulkupdate() {
   $forum_vid = variable_get('forum_nav_vocabulary', '');
-  $query = "SELECT tid, vid, name, src, dst FROM {term_data} LEFT JOIN {url_alias} ON CONCAT('taxonomy/term/', tid) = src WHERE src IS NULL AND vid != %d";
+
+  // Detect if there are custom srcs so that we can update (or skip) them (CUSTOMSRC)
+  $vocabularies = taxonomy_get_vocabularies();
+  $extquery = '';
+  foreach ($vocabularies as $vocab) {
+    $cust_src = '';
+    if($cust_src = variable_get('pathauto_taxonomy_'.$vocab->vid.'_src', '')) {
+      $extquery .= "OR CONCAT('".$cust_src."', tid) = src ";
+    }
+  }
+  // Append the extended query (CUSTOMSRC)
+  $query = "SELECT tid, vid, name, src, dst FROM {term_data} LEFT JOIN {url_alias} ON CONCAT('taxonomy/term/', tid) = src ".$extquery."WHERE src IS NULL AND vid != %d";
   $result = db_query_range($query, $forum_vid, 0, variable_get('pathauto_max_bulk_update', 50));
   
   $count = 0;
@@ -128,7 +139,14 @@ function forum_pathauto($op) {
  */
 function forum_pathauto_bulkupdate() {
   $forum_vid = variable_get('forum_nav_vocabulary', '');
-  $query = "SELECT tid, vid, name, src, dst FROM {term_data} LEFT JOIN {url_alias} ON CONCAT('forum/', tid) = src WHERE vid = %d AND src IS NULL";
+  // Try to detect the custom src entries. I'm not sure if this works. Not tested. (CUSTOMSRC)
+  $cust_src = '';
+  $extquery = '';
+  if($cust_src = variable_get('pathauto_forum_'.$forum_vid.'_src', '')) {
+    $extquery .= "OR CONCAT('".$cust_src."', tid) = src ";
+  }
+  // Append extended query (CUSTOMSRC)
+  $query = "SELECT tid, vid, name, src, dst FROM {term_data} LEFT JOIN {url_alias} ON CONCAT('forum/', tid) = src ".$extquery."WHERE vid = %d AND src IS NULL";
   $result = db_query_range($query, $forum_vid, 0, variable_get('pathauto_max_bulk_update', 50));
 
   $count = 0;
