This introduces a bunch of race conditions around concurrent update/expiry but I'm honestly not sure if they matter or not. Careful testing might be a good idea.