use buffers not strings