Sync version
Async version
Add examples + optimise