Probably want a try/finally due to ```state = old``` to maintain strong exception guarantee?