add support to Location to pass a block during initialization
Refactor the Request to reduce complexity