service abstraction
refactor
merge