add promises support