added tests, fixed up requests and async