Improve channel reading to do it in chunks