[ci skip] - initial factoring into service provider subclasses
[ci skip] - fixing up specs