animation improved (promise added)