Unlike our other object hooks (e.g., hook_nodeapi, hook_taxonomy), hook_user passes two arguments by reference. Both are representations of the user object, one in array and the other in object format. There's a lot of interest in streamlining our object handling. I've been working on a set of generalized object handling methods that build on our current ones in http://drupal.org/node/113435. As I dig into this, I'm finding that hook_user's difference from our other hooks is one of the main barriers. Maintaining this double pass by reference would force all other object types to do the same, even though they don't have data they need to pass. Hence my question: can we change hook_user to behave like the other object hooks, passing a single argument (the user object) by reference? Pitfalls? Looking at the implementations in user.module, this double passing looks to be mainly a matter of convenience--separating out what are parameters to match (user_load()) or extended user attributes (user_save()) from the base user object. My hunch is, if they're user data they're user data as far as hook implementations are concerned, so it shouldn't matter much if they're passed in a single object. But maybe this is wishful thinking. I'm thinking a patch to change hook_user to pass a single argument by preference may be a necessary prior patch to getting a generalized set of methods in. Thoughts?