using through to do transforms
refactor _cmp