Maybe resumeMonitoringMutations() should take a boolean argument. If true, the it would also recompute visiblity. That way, if you were going to add or remove a bunch of children, you could call pause first, make your mutations, and then call resume(true).  Would your algorithm still work if you did that, or does it depend on one child at a time mutation monitoring?