It it took me a while to figure out that ACL.impersonate returns the previous context rather than the one you are currently impersonating.  I'm pretty sure there's a better way to get the context for "bob", if so please enlighten me :)