added .then based composition with promises