ang again, final refactor