Right now we have an upgrade function that adds, replaces, and removes facets, and an event for adding a facet, an event for replacing a facet, and an event for removing a facet.
It seems it would be simpler if the upgrade facet just added and removed facets, and there was no replace facet functionality and no replace facet event. Replacing a facet is just removing a facet and adding a new facet with all or some of the same functions as the removed facet. In this case the remove facet functionality would run first, and the add facet functionality would run second. What do you think?