making asynchronous
break functionalities into modules