refactor to Futures