diff -urp taxonomy_menu/taxonomy_menu.inc taxonomy_menu_my/taxonomy_menu.inc
--- taxonomy_menu/taxonomy_menu.inc	2008-01-31 21:23:34.000000000 +0500
+++ taxonomy_menu_my/taxonomy_menu.inc	2008-06-30 18:14:33.000000000 +0600
@@ -73,6 +73,12 @@ function _taxonomy_menu_admin() {
     '#title'          => t('Module page'),
     '#type'           => 'textfield',
   );
+  $form['taxonomy_menu_hide_module_page'] = array(
+    '#default_value'  => variable_get('taxonomy_menu_hide_module_page', FALSE),
+    '#description'    => t('If checked, links to module page removes from all paths. path will be like "1/2/3" instead of "categories/1/2/3"'),
+    '#title'          => t('Hide link to module page'),
+    '#type'           => 'checkbox',
+  );
   $form['taxonomy_menu_display_num'] = array(
     '#default_value'  => variable_get('taxonomy_menu_display_num', FALSE),
     '#description'    => t('If checked, number of node per term will be displayed in the menu.'),
@@ -106,6 +112,10 @@ function _taxonomy_menu_admin() {
  * Its the main function for this module.
  */
 function _taxonomy_menu_menu() {
+  if (module_exists('pathauto')) {
+    $pathauto_exists=true; 
+    _pathauto_include();
+  }
   $items['admin/settings/taxonomy_menu'] = array(
     'access'              => user_access('administer site configuration'),
     'callback'            => 'drupal_get_form',
@@ -123,7 +133,8 @@ function _taxonomy_menu_menu() {
 
   foreach (taxonomy_get_vocabularies() as $vocabulary) {
     if (variable_get('taxonomy_menu_show_'. $vocabulary->vid, TAXONOMY_MENU_NONE)) {
-      $path =  variable_get('taxonomy_menu_display_page', 'category') .'/'. $vocabulary->vid;
+      if(variable_get('taxonomy_menu_hide_module_page', FALSE)) $path =  $vocabulary->vid;
+      else $path =  variable_get('taxonomy_menu_display_page', 'category') .'/'. $vocabulary->vid;
       $items[$path] = array(
         'access'          => $access,
         'callback'        => '__taxonomy_menu_page',
@@ -133,6 +144,11 @@ function _taxonomy_menu_menu() {
         'title'           => t($vocabulary->name),
         'weight'          => $vocabulary->weight
       );
+      
+      if($pathauto_exists) {
+        $placeholders = pathauto_get_placeholders('taxonomy', $vocabulary);    
+        $alias = pathauto_create_alias('taxonomy_menu', 'update', $placeholders, $path,$vocabulary->vid);
+      }
 
       $tree = taxonomy_get_tree($vocabulary->vid);
       $old_depth = -1;
@@ -149,6 +165,11 @@ function _taxonomy_menu_menu() {
         $old_depth  = $term->depth;
         $old_path   = $path;
 
+        if($pathauto_exists) {
+          $placeholders = pathauto_get_placeholders('taxonomy', $term);    
+          $alias = pathauto_create_alias('taxonomy_menu', 'update', $placeholders, $path,$term->tid);
+        }
+
         // Calculate the numbers of children nodes
         $num = taxonomy_term_count_nodes($term->tid);
 
@@ -190,35 +211,44 @@ function _taxonomy_menu_menu() {
  */
 function _taxonomy_menu_node_view(&$node, &$vocabs) {
   foreach ($vocabs as $vid => $vocab) {
-    $path = variable_get('taxonomy_menu_display_page', 'category') .'/'. $vid;
 
-    $tree = taxonomy_get_tree($vid);
-    $old_depth = -1;
-    $old_path = $path;
-
-    // Generate the entire breadcumb
-    foreach ($tree as $term) {
-      if ($term->depth <= $old_depth) {
-        $slashes_to_remove = $old_depth - $term->depth + 1;
-        for ($i = 0; $i < $slashes_to_remove; $i++) {
-          $old_path = substr($old_path, 0, strrpos($old_path, "/"));
-        }
-      }
-      $path       = $old_path .'/'. $term->tid;
-      $old_depth  = $term->depth;
-      $old_path   = $path;
-
-      // When we reach the term that this node uses,
-      // set the breadcumb
-      if ($term->tid == $vocab[0]) {
-        menu_set_location(array(
-          array('path' => $path, 'title' => t($term->name)),
-          array('path' => 'node/'. $node->nid, 'title' => $node->title)
-        ));
+    if(variable_get('taxonomy_menu_hide_module_page', FALSE)) $path = $vid;
+    else $path =  variable_get('taxonomy_menu_display_page', 'category') .'/'. $vid;
+
+    $breadcrumb_items = array('path' => $path, 'title' => t(taxonomy_get_vocabulary($vid)->name)) +
+                        _taxonomy_menu_get_term_breadcrumb_items($vocab[0], $path) +
+                        array('path' => 'node/'. $node->nid, 'title' => $node->title);
+
+    menu_set_location($breadcrumb_items);
+    return;
+  }
+}
 
-        // Quit after the first match.
-        return;
+/**
+ * Generates location items for specifyed term and parent terms
+ *
+ * @param
+ *   Number. Term identificator.
+ * @param
+ *   Array. Base path for term (vocabulary path).
+ */
+function _taxonomy_menu_get_term_breadcrumb_items($tid, $path) {
+  $tree = taxonomy_get_tree(taxonomy_get_term($tid)->vid);
+  
+  foreach ($tree as $term_node) {
+    if ($term_node->tid == $tid) {
+
+      $parent_items=array();
+
+      if ($term_node->parents[0]!=0) {
+        $parent_items = _taxonomy_menu_get_term_breadcrumb_items($term_node->parents[0], $path);
+        $parent = end($parent_items);
+        $path = $parent['path'];
       }
+
+      array_push($parent_items, array('path' => $path.'/'.$term_node->tid, 'title' => t($term_node->name)));
+
+      return $parent_items;
     }
   }
 }
@@ -228,12 +258,12 @@ function _taxonomy_menu_node_view(&$node
  */
 function _taxonomy_menu_page() {
   // Check if the Vocabulary ID is set
-  if ($vid = arg(1)) {
-
+  if (($vid = arg(0)) || ($vid=variable_get('taxonomy_menu_hide_module_page', FALSE)?arg(0):FALSE)) {
+    
     // Depending on what Output technique is used,
     // show the nodes' list
     if (variable_get('taxonomy_menu_show_'. $vid, TAXONOMY_MENU_NORMAL) == TAXONOMY_MENU_NORMAL) {
-      if ($tid = arg(2)) {
+     if ($tid=variable_get('taxonomy_menu_hide_module_page', FALSE)?arg(1):arg(2)) {
         $tid = explode('/', $_GET['q']);
         $tid = db_escape_string(array_pop($tid));
 
diff -urp taxonomy_menu/taxonomy_menu.info taxonomy_menu_my/taxonomy_menu.info
--- taxonomy_menu/taxonomy_menu.info	2008-01-31 21:40:07.000000000 +0500
+++ taxonomy_menu_my/taxonomy_menu.info	2008-06-23 18:13:00.000000000 +0600
@@ -3,9 +3,3 @@ core          = "5.x"
 name          = "Taxonomy Menu"
 dependencies  = taxonomy
 description   = "Adds links to taxonomy terms to the global navigation menu."
-
-; Information added by drupal.org packaging script on 2008-01-31
-version = "5.x-1.03"
-project = "taxonomy_menu"
-datestamp = "1201797607"
-
diff -urp taxonomy_menu/taxonomy_menu.module taxonomy_menu_my/taxonomy_menu.module
--- taxonomy_menu/taxonomy_menu.module	2008-01-31 21:23:34.000000000 +0500
+++ taxonomy_menu_my/taxonomy_menu.module	2008-06-23 18:13:00.000000000 +0600
@@ -32,6 +32,7 @@ function __taxonomy_menu_admin() {
 function __taxonomy_menu_admin_submit(&$form_id, &$form) {
   // Save these options
   variable_set('taxonomy_menu_display_page',        $form['taxonomy_menu_display_page']);
+  variable_set('taxonomy_menu_hide_module_page',    $form['taxonomy_menu_hide_module_page']);
   variable_set('taxonomy_menu_display_num',         $form['taxonomy_menu_display_num']);
   variable_set('taxonomy_menu_hide_empty',          $form['taxonomy_menu_hide_empty']);
   variable_set('taxonomy_menu_display_descendants', $form['taxonomy_menu_display_descendants']);
@@ -138,4 +139,25 @@ function taxonomy_menu_taxonomy() {
 
 function taxonomy_menu_term_path(&$term) {
   return 'asdf';
-}
\ No newline at end of file
+}
+
+function taxonomy_menu_pathauto($op){
+  switch ($op){
+    case 'settings':
+      $settings = array();
+      $settings['module'] = 'taxonomy_menu';
+      $settings['token_type'] = 'taxonomy';
+      $settings['groupheader'] = t('Taxonomy menu path settings');
+      $settings['patterndescr'] = t('Pattern for taxonomy menu pages');
+      $settings['patterndefault'] = t('categories/[vocab-raw]/[cat-raw]');
+      $patterns = token_get_list('taxonomy');
+      foreach ($patterns as $type => $pattern_set) {
+        if ($type != 'global') {
+          foreach ($pattern_set as $pattern => $description) {
+            $settings['placeholders']['['. $pattern .']'] = $description;
+          }
+        }
+      }
+    return (object) $settings;
+  }
+}
