rename fn
make interface use an interable
use pipe for other handler