all functions now async, no returns