service abstraction