refactor using through