separate sync and async methods