refactor dat stuff