void functions now return futures so calling threads can block until they're done