modified promise structure