Refactored with more properties and better Promote