Lets not use a ThreadLocal, and instead encapsulate returns

This just hands along the Username in addition to the other two items
returned, small modifications to the pattern match to get the info back
out.

Much less complicated imho.