To my understanding of the current behavior, the InterfaceMonitorManager creates a ZooKeeper watcher (InterfaceMonitor) per scope. The InterfaceMonitor however monitors ZK nodes according to the objectClass (ignoring scope). When a ZK node change is detected, the IMs watching that node all trigger IMM's event handler. But instead of sending out the EndpointListener events corresponding to the scope for which each IM was created, it loops through all of the EndpointListener requested scopes and notifies the first matching one. This effectively causes multiple events to be triggered for the same scope (instead of one per IM scope), and possibly others to be missed.