remove promises, separate out concerns