Updated once more to reflect that it can be run asynchronously, and synchronously