refactor and split out requests