added protocol for implementation to allow / disallow switching
moved event trigger to KVO observer after initial state