In my previous project for a client I implemented a similar feature (though I named it masquerade).
Thanks for sharing it.