added async and defer