refactor BufferPush