Actually, maybe `add()` and `remove()` should be made internal?