return futures instead of promises