Between framework 1.8.x and 2.0.0, we removed the UNRESOLVED event when a bundle is explicitly refreshed. We need to put it back. It appears that when the code was restructured to have bundle uninstallation fire an UNRESOLVED event, it missed the case where a bundle was refreshed directly. Due to the uninstallation requirement, it is not possible to simply put the event firing back in place in refreshBundle() since it would result in multiple UNRESOLVED events being fired. We need to walk our way back from the refreshBundle() method to see who is using it and to also make sure setBundleStateAndNotify() is correctly called in all cases.