refactoring, now all devices are observers