improvements to promises