Full review (do not merge)

Probably better to use a namespace different from ::Proxy, which is used by the core smart-proxy and core modules.