Quick follow up... I have been going back and forth between UIComponent and NamingContainer for the type for the "root" parameter. After discussing this offline with Blake, I believe that specifying NamingContainer is the better way to go. This makes the contract more explicit and allows us to catch misuse at compile time instead of runtime.
Andy
