DOM promises - based API
update @ 4aa2527fcb2802d574c4f71680d97478ea466d7d