since asynchronous stuff can be a giant pain