--- custom_breadcrumbs.admin.inc	2008-09-19 12:57:24.000000000 +1200
+++ custom_breadcrumbs.admin.inc	2008-12-07 21:45:41.000000000 +1300
@@ -73,6 +73,21 @@ function custom_breadcrumbs_form() {
     '#default_value' => $bid ? $breadcrumb->paths : NULL
   );
 
+  $form['set_active_menu'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Override menu path'),
+    '#description' => t("If checked, the node's default location in the menu hierarchy will be forced to match the breadcrumb trail. This does not automatically add an entry for the node to existing menus, but will cause those menus to be displayed as 'active' when the node in question is viewed."),
+    '#return_value' => TRUE,
+    '#default_value' => $bid ? $breadcrumb->set_active_menu : FALSE
+  );
+  
+  $form['help2'] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => FALSE,
+    '#title' => t('Special identifiers'),
+    '#description' => t("The following identifiers can be used to achieve a special behavior:<br />" . check_plain('<pathauto>') . " will clean any path using the current pathauto module settings, if that module is installed.<br />" . check_plain('<none>') . " can be used as a path to have a breadcrumb element that is not hyperlinked.<br />&nbsp<br />Identifiers should be added to the paths area in the following format:  identifier|path.<br />For example: " . check_plain('<pathauto>') . "|[ogname-raw]"),
+  );
+  
   $form['help'] = array(
     '#type' => 'fieldset',
     '#collapsible' => TRUE,
@@ -92,14 +107,10 @@ function custom_breadcrumbs_form() {
     $form['help']['#collapsed'] = FALSE;
   }
   
-  $form['set_active_menu'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Override menu path'),
-    '#description' => t("If checked, the node's default location in the menu hierarchy will be forced to match the breadcrumb trail. This does not automatically add an entry for the node to existing menus, but will cause those menus to be displayed as 'active' when the node in question is viewed."),
-    '#return_value' => TRUE,
-    '#default_value' => $bid ? $breadcrumb->set_active_menu : FALSE
+  $form['help2']['tokens'] = array(
+    '#value' => theme('custom_breadcrumbs_help_identifiers'),
   );
-  
+
 
   $form['buttons']['submit'] = array(
     '#type' => 'submit',


--- custom_breadcrumbs.module	2008-09-22 14:25:43.000000000 +1200
+++ custom_breadcrumbs.module	2008-12-07 21:41:43.000000000 +1300
@@ -55,16 +55,9 @@ function custom_breadcrumbs_nodeapi($nod
       $trail = array(l(t('Home'), '<front>'));
       $location = array();
       for ($i = 0; $i < count($titles); $i++) {
-        // Skip empty titles
-        if ($title = trim($titles[$i])) {
-          // Output plaintext instead of a link if there is a title without a path.
-          $path = trim($paths[$i]);
-          if (strlen($path) > 0 && $path != '<none>') {
-            $trail[] = l($title, trim($paths[$i]));
-            $location[$i] = menu_get_item(drupal_get_normal_path($paths[$i]));          }
-          else {
-            $trail[] = check_plain($title);
-          }
+        if ($title = trim($titles[$i])) { // create breadcrumb
+          $location[$i] = menu_get_item(drupal_get_normal_path($paths[$i]));
+          $trail[] = _custom_breadcrumbs_create_crumb($title, trim($paths[$i]));
         }
       }
       drupal_set_breadcrumb($trail);
@@ -74,7 +67,6 @@ function custom_breadcrumbs_nodeapi($nod
       }
     }
   }
-
 }
 
 function _custom_breadcrumbs_load_breadcrumb($bid) {
@@ -137,3 +129,61 @@ function _custom_breadcrumbs_delete_brea
   $sql = 'DELETE FROM {custom_breadcrumb} WHERE bid = %d';
   db_query($sql, $bid);
 }
+/**
+ * Private function for custom breadcrumb to create a crumb item
+ *
+ * @param $title
+ *   The human readable title to be rendered by the browser
+ * @param $original_path
+ *   The desired URI and/or special identifier
+ */
+function _custom_breadcrumbs_create_crumb($title, $original_path)
+{
+  list($identifier, $path) = explode("|", $original_path, 2);
+  
+  if ($path) {
+    switch ($identifier) {
+      case '<pathauto>':
+        if (module_exists('pathauto'))
+          $crumb = l($title, pathauto_cleanstring($path, FALSE));
+        break;
+      default:
+        $crumb = l($title, $original_path);
+    }
+  } else { // This may be just be a single identifier
+    switch($identifier) {
+      case '<none>':
+        $crumb = $title;
+        break;
+      default:
+        $crumb = l($title, $original_path);
+    }
+  }
+
+  return $crumb;
+}
+
+/**
+ * Builds a table of identifiers and their behaviors
+ */
+function theme_custom_breadcrumbs_help_identifiers()
+{
+  $headers = array(t('Identifier'), t('Behaviour'));
+  $rows = array();
+  
+  // <none> identifier
+  $row = array();
+  $row[] = check_plain('<none>');
+  $row[] = 'This will result in a plain text crumb. This identifier should not be used with the pipe (|) symbol.';
+  $rows[] = $row;
+  
+  // <pathauto> identifier
+  if (module_exists('pathauto')) {
+    $row = array();
+    $row[] = check_plain('<pathauto>');
+    $row[] = 'Cleans the given path using your pathauto replacement rules.';
+    $rows[] = $row;
+  }
+  
+  return theme('table', $headers, $rows, array('class' => 'description'));
+ }
