 <p>It is not obvious why you get extra exit events, but it may be because you are trying to register more than the 20 allowed monitoring regions. Perhaps you get exit events when the older regions are unloaded by CoreLocation when you go over the limit.</p> <p>The issue with going over the limit happens because you call <code>startMonitoringForRegion</code> when the ViewController loads, but never call <code>stopMonitoringFirRegion</code> on each region when the ViewController becomes inactive. </p> <p>I would change this and maybe it will fix your problem. Just a guess -- if that does not work it may be time to decouple the beacon code from your ViewController as you suggest.</p>