do not forget hooks
more logical buffering; stream sink