Tweaked to only allocate read buffers if they haven't been previously allocated (lighter memory footprint)