--- hs_taxonomy.module.20100408	2010-04-08 12:52:29.000000000 -0700
+++ hs_taxonomy.module	2010-04-08 13:59:21.000000000 -0700
@@ -542,11 +542,17 @@ function hs_taxonomy_token_values($type,
         }
       }
 
+      // Build consistency to handle all three forms of $node->taxonomy
+      $termobjarray=taxonomy_node_get_terms($node);
+      foreach ($termobjarray as $item) {
+        $termsbyvocab[$item->vid][]=$item->tid;
+      }
+
       // Generate the per-vid "save-lineage-termpath" tokens.
       foreach ($all_vids as $vid) {
         $terms = array();
         if (in_array($vid, $hs_vids)) {
-          $selection = $node->taxonomy[$vid];
+          $selection = $termsbyvocab[$vid];
           $terms = _hs_taxonomy_token_termpath_for_vid($selection, $vid);
         }
 
@@ -556,7 +562,7 @@ function hs_taxonomy_token_values($type,
 
       // We use the terms of the first vocabulary that uses Hierarchical
       // Select for the default "save-lineage-termpath" tokens.
-      $vids = array_intersect(array_keys($node->taxonomy), $hs_vids);
+      $vids = array_intersect(array_keys($termsbyvocab), $hs_vids);
       if (!empty($vids)) {
         $vid = $vids[0];
         $values['save-lineage-termpath'] = implode($separator, array_map('check_plain', $terms));
