Adding  async version, which should be most performent version.
Adding tests