add promise delegation