diverge should only happen under remove to avoid being called twice