Introduce hw buffers, rebase the code a lot