Refatored to use Composite and Promises