implemented promise specification