In a recent thread I asked about using #pre_render callbacks to affect the way nodes are rendered. (See http://drupal.org/node/147662). This goes some way toward solving my problem, but things could be better. When my #pre_render hook is called, the data structure is filled with arrays that look like: [SOME KEY HERE] => Array ( [#value] => SOME HTML HERE [#weight] => SOME NUMBER HERE ) Because the #value field contains HTML, its very hard to modify. Practically speaking, all I can do is remove some fields from the node content, or reorder fields. I can't manipulate each field the way I really want. (For example, I may want to theme a CCK field differently depending on whether the node in question is a page or a story.) I'd like to see developers stop using this #value => HTML model when implementing hook_nodeapi($op = 'view'). Everyone does, because the documentation on api.drupal.org suggests implementing it this way: <code> case 'view': $node->content['my_additional_field'] = array( '#value' => theme('mymodule_my_additional_field', $additional_field), '#weight' => 10, ); break; </code> Instead, it should be implemented something like: <code> case 'view': // my_additional_data is an array $node->content['my_additional_data'] = $node->my_additional_data; $node->content['my_additional_data']['#theme'] = 'mymodule_my_additional_data'; $node->content['my_additional_data']['#weight'] = 10; break; </code> What this does is postpone the theming until drupal_render is called. And #pre_render hooks have a chance to manipulate data or change the theme function to be called. Please let me know if I'm right or wrong about this, -Dave