Factor services with base service.

Lots of code was duplicated on the derived classes, including user output messages.