fix the buffer behavior and explain it, should be good now