clean code
some async