hi, I am writing a patch for the NAT (node auto term) module. (See http://drupal.org/node/1075432 for more information about what I'm trying to do.) The thing I'm having a problem with is using token_replace() inside a hook_field_formatter_view() hook function to generate a link path from a formatter setting string. One of the tokens I've created works fine - it uses the $term object for a taxonomy term, which is returned as part of the existing module code. When I set the setting to 'nat-bad-link/[term:tid]', it is correctly transformed into e.g. 'nat-bad-link/65'. However I can't get my code to work with the other 3 objects I want to expose, which are all passed as function parameters: $field, $entity, and $entity_type. E.g. if I use the token '[field:id]', the token isn't replaced in the final path. I am explicitly casting these to (object) because they are passed in as nested arrays. I've tried printing out $term and (object) $field using dpr(), and the results look identical in structure, so I can't see why it isn't working. The code I have written looks like this (partly from the original nat code, with some additions): /** * Implements hook_field_formatter_view(). */ function nat_field_formatter_view($entity_type, $entity, $field, $instance, $lan gcode, $items, $display) { $element = array(); $settings = $display['settings']; foreach ($items as $delta => $item) { if ($item['tid'] == 'autocreate') { $element[$delta] = array('#markup' => check_plain($item['name'])); } else { $term = $item['taxonomy_term']; $nids = array_keys(nat_get_nids(array($term->tid), FALSE)); if ($nids && $nids[0]) { $element[$delta] = array( '#type' => 'link', '#title' => $term->name, '#href' => "node/" . $nids[0] ); } else { // it's a bad link, so mark it as such and redirect to a handling page. if ($settings['missing_link_handler_path'] != '') { // first substitute the arguments. //dpr($term); //dpr((object)$entity_type); // ******************************* This is the bit that won't work ************************ $href=token_replace($settings['missing_link_handler_path'],array( 'term' => $term, 'field' => (object) $field, 'entity_type' => (object) $entity_type, 'entity' => (object) $entity, ) ); $element[$delta] = array( '#type' => 'link', '#title' => $term->name, '#href' => check_plain($href), // TODO - check whether check_url is needed. '#prefix' => '<span class="nat-missing-link">', '#suffix' => '</span>' ); } else { $element[$delta] = array('#markup' => check_plain($term->name)); } } } } return $element; } Any help appreciated as I was stuck for hours on this last night! :-) thanks, andy baxter