use Q deferreds to manage concurrent requests