refactor, use through