Promise refactoring

Could do more here, but this will do for now