put in async and move things to utils
make it more readable
more clean up