switcher impl + tests;