use payload state instead of dma