Refactor block process.

A PR to tidy up some loose ends, so that we can focus on discussing the design.