refactor, add service interface