Refactored to put the burden of call site selection on the caller of Whitelist, not the implementation.
Otherwise there is no good way to handle weird cases like GString in the right place.