added device factory, service, ctrl