use separate buffer