`do*` functions should not persist modifications. this should be done at higher level (in the `demote` method).