Base implementation

`flush()` being an internal detail