diff --git a/core/base-service/index.js b/core/base-service/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..85fce21a5f63daef4be93995fb894914a8a0cb89
--- /dev/null
+++ b/core/base-service/index.js
@@ -0,0 +1,35 @@
+'use strict'
+
+const BaseService = require('../../services/base')
+const BaseJsonService = require('../../services/base-json')
+const NonMemoryCachingBaseService = require('../../services/base-non-memory-caching')
+const BaseStaticService = require('../../services/base-static')
+const BaseSvgScrapingService = require('../../services/base-svg-scraping')
+const BaseXmlService = require('../../services/base-xml')
+const BaseYamlService = require('../../services/base-yaml')
+
+const deprecatedService = require('../../services/deprecated-service')
+
+const {
+  NotFound,
+  InvalidResponse,
+  Inaccessible,
+  InvalidParameter,
+  Deprecated,
+} = require('../../services/errors')
+
+module.exports = {
+  BaseService,
+  BaseJsonService,
+  NonMemoryCachingBaseService,
+  BaseStaticService,
+  BaseSvgScrapingService,
+  BaseXmlService,
+  BaseYamlService,
+  deprecatedService,
+  NotFound,
+  InvalidResponse,
+  Inaccessible,
+  InvalidParameter,
+  Deprecated,
+}
diff --git a/doc/TUTORIAL.md b/doc/TUTORIAL.md
index d52569bccec8daeac9857f4d8b4336302983a7f5..4d58aea59c957990ee8aeae548022882fedc73a2 100644
--- a/doc/TUTORIAL.md
+++ b/doc/TUTORIAL.md
@@ -110,7 +110,7 @@ As a first step we will look at the code for an example which generates a badge
 ```js
 'use strict'                                         // (1)
 
-const BaseService = require('../base')               // (2)
+const { BaseService } = require('..')                // (2)
 
 module.exports = class Example extends BaseService { // (3)
 
@@ -134,7 +134,7 @@ module.exports = class Example extends BaseService { // (3)
 Description of the code:
 
 1. We declare strict mode at the start of each file. This prevents certain classes of error such as undeclared variables.
-2. Our service badge class will extend `BaseService` so we need to require it. We declare variables with `const` and `let` in preference to `var`.
+2. Our service badge class will extend `BaseService` so we need to require it. Variables are declared with `const` and `let` in preference to `var`.
 3. Our module must export a class which extends `BaseService`.
 4. `route()` declares the URL path at which the service operates. It also maps components of the URL path to handler parameters.
     * `base` defines the first part of the URL that doesn't change, e.g. `/example/`.
@@ -170,8 +170,8 @@ This example is based on the [Ruby Gems version](https://github.com/badges/shiel
 ```js
 'use strict'                                                    // (1)
 
-const BaseJsonService = require('../base-json')                 // (2)
-const { renderVersionBadge } = require('../../lib/version')     // (3)
+const { renderVersionBadge } = require('../../lib/version')     // (2)
+const { BaseJsonService } = require('..')                       // (3)
 
 const Joi = require('joi')                                      // (4)
 const schema = Joi.object({                                     // (4)
@@ -212,13 +212,13 @@ module.exports = class GemVersion extends BaseJsonService {     // (5)
 
 Description of the code:
 1. As with the first example, we declare strict mode at the start of each file.
-2. Our badge will query a JSON API so we will extend `BaseJsonService` instead of `BaseService`. This contains some helpers to reduce the need for boilerplate when calling a JSON API.
-3. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/lib`. Some useful generic helpers can be found in:
+2. In this case we are making a version badge, which is a common pattern. Instead of directly returning an object in this badge we will use a helper function to format our data consistently. There are a variety of helper functions to help with common tasks in `/lib`. Some useful generic helpers can be found in:
     * [build-status.js](https://github.com/badges/shields/blob/master/lib/build-status.js)
     * [color-formatters.js](https://github.com/badges/shields/blob/master/lib/color-formatters.js)
     * [licenses.js](https://github.com/badges/shields/blob/master/lib/licenses.js)
     * [text-formatters.js](https://github.com/badges/shields/blob/master/lib/text-formatters.js)
     * [version.js](https://github.com/badges/shields/blob/master/lib/version.js)
+3. Our badge will query a JSON API so we will extend `BaseJsonService` instead of `BaseService`. This contains some helpers to reduce the need for boilerplate when calling a JSON API.
 4. We perform input validation by defining a schema which we expect the JSON we receive to conform to. This is done using [Joi](https://github.com/hapijs/joi). Defining a schema means we can ensure the JSON we receive meets our expectations and throw an error if we receive unexpected input without having to explicitly code validation checks. The schema also acts as a filter on the JSON object. Any properties we're going to reference need to be validated, otherwise they will be filtered out. In this case our schema declares that we expect to receive an object which must have a property called 'status', which is a string.
 5. Our module exports a class which extends `BaseJsonService`
 6. As with our previous badge, we need to declare a route. This time we will capture a variable called `gem`.
@@ -253,7 +253,16 @@ Specifically `BaseJsonService` will handle the following errors for us:
 * API returns a response which can't be parsed as JSON
 * API returns a response which doesn't validate against our schema
 
-Sometimes it may be necessary to manually throw an exception to deal with a non-standard error condition. If so, standard exceptions can be imported from [errors.js](https://github.com/badges/shields/blob/master/services/errors.js) and thrown.
+Sometimes it may be necessary to manually throw an exception to deal with a
+non-standard error condition. If so, there are several standard exceptions that can be used. These exceptions are defined in
+[errors.js](https://github.com/badges/shields/blob/master/services/errors.js)
+and can be imported via the import shortcut and then thrown:
+
+```js
+const { NotFound } = require('..')
+
+throw new NotFound({ prettyMessage: 'package not found' })
+```
 
 ### (4.4) Adding an Example to the Front Page
 
diff --git a/doc/deprecating-badges.md b/doc/deprecating-badges.md
index 98f2ba8f4e0d787b280fe438e4a55bad9cc1ae60..d11f0c0ec41bf6132b01a7e0078d005c68292d28 100644
--- a/doc/deprecating-badges.md
+++ b/doc/deprecating-badges.md
@@ -40,10 +40,10 @@ module.exports = deprecatedService({
 
 Locate the test file(s) for the service, which can be found in `*.tester.js` files located in the service directory (`./services/:service-name/`), such as `./services/imagelayers/imagelayers.tester.js`.
 
-With `DeprecatedService` classes we cannot use the utility functions from `create-service-tester.js` so you will need to create the `ServiceTester` class directly. For example:
+With `DeprecatedService` classes we cannot use `createServiceTester()` so you will need to create the `ServiceTester` class directly. For example:
 
 ```js
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
@@ -69,7 +69,8 @@ Here is an example of what the final result would look like for a test file:
 ```js
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
   title: 'ImageLayers',
diff --git a/doc/rewriting-services.md b/doc/rewriting-services.md
index 54c256a34efd8af07a460b036db0839026f89153..aabac962fef06e16768546be2f74d85b612535cf 100644
--- a/doc/rewriting-services.md
+++ b/doc/rewriting-services.md
@@ -8,7 +8,7 @@ Meanwhile, the legacy services extend from an abstract
 adapter called [LegacyService][] which provides a place to put the
 `camp.route()` invocation. The wrapper extends from [BaseService][], so it
 supports badge examples via `category`, `examples`, and `route`. Setting `route`
-also enables `create-service-tester.js` to infer a service's base path, reducing
+also enables `createServiceTester()` to infer a service's base path, reducing
 boilerplate for [creating the tester][creating a tester].
 
 Legacy services look like:
@@ -278,7 +278,7 @@ https://github.com/hapijs/joi/blob/master/API.md
 Switch to `createServiceTester`:
 
 ```js
-const t = require('../create-service-tester')()
+const t = (module.exports = require('..').createServiceTester())
 ```
 
 This may require updating the URLs, which will be relative to the service's base
diff --git a/doc/service-tests.md b/doc/service-tests.md
index ad888ee73440599a39dde1318b4e606f50056775..3238efa6ecf5781e6995052906f3c2ab21a86786 100644
--- a/doc/service-tests.md
+++ b/doc/service-tests.md
@@ -37,11 +37,19 @@ We'll start by adding some boilerplate to our file:
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 ```
 
-1. Import [Joi][] We'll use this to make assertions. This is the same library we use to define schema for validation in the main badge class.
-2. If our `.service.js` module exports a single class, we can `require('../create-service-tester')` and use convention to create a `ServiceTester` object. Calling this inside `services/wercker/wercker.tester.js` will create a `ServiceTester` object configured for the service exported in `services/wercker/wercker.service.js`. We will add our tests to this `ServiceTester` object `t`, which is exported from the module.
+1. Import [Joi][] We'll use this to make assertions. This is the same library
+   we use to define schema for validation in the main badge class.
+
+2. If our `.service.js` module exports a single class, we can
+   `require('..').createServiceTester()`, which uses convention to create a
+   `ServiceTester` object. Calling this inside
+   `services/wercker/wercker.tester.js` will create a `ServiceTester` object
+   configured for the service exported in `services/wercker/wercker.service.js`.
+   We will add our tests to this `ServiceTester` object `t`, which is exported
+   from the module.
 
 ### (2) Our First Test Case
 
diff --git a/services/amo/amo.tester.js b/services/amo/amo.tester.js
index 5e5d0eb4d26492ade468347a8f763a9089cd2cec..d22e2d021cda893b67d9243ecf06859883efe880 100644
--- a/services/amo/amo.tester.js
+++ b/services/amo/amo.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isStarRating,
diff --git a/services/ansible/ansible-quality.service.js b/services/ansible/ansible-quality.service.js
index 98c96498ac4389426b13b97f8fc7d6c3e20e5180..16eed6a4f8e965562954bfd2397b5d64068713ad 100644
--- a/services/ansible/ansible-quality.service.js
+++ b/services/ansible/ansible-quality.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { floorCount } = require('../../lib/color-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 
 const ansibleContentSchema = Joi.object({
   quality_score: Joi.number()
diff --git a/services/ansible/ansible-quality.tester.js b/services/ansible/ansible-quality.tester.js
index b7563eafc5532d5c68505433e13f1247b4d1f926..cb9dced030a0749c0a15f0ed8c37948a20e4080d 100644
--- a/services/ansible/ansible-quality.tester.js
+++ b/services/ansible/ansible-quality.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('quality score (valid)')
   .get('/432.json')
diff --git a/services/ansible/ansible-role.service.js b/services/ansible/ansible-role.service.js
index bc8afb9703dc18bad5617692dfc66fbb0eb61559..e987da557476404bd358537b38943ee4bafb9951 100644
--- a/services/ansible/ansible-role.service.js
+++ b/services/ansible/ansible-role.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const ansibleRoleSchema = Joi.object({
diff --git a/services/ansible/ansible-role.tester.js b/services/ansible/ansible-role.tester.js
index cad57ee271595ee73b00412f0718e4f4abbf8334..15168be3fc7a89e2afa48b45611793cf3f05f4f2 100644
--- a/services/ansible/ansible-role.tester.js
+++ b/services/ansible/ansible-role.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/apm/apm.service.js b/services/apm/apm.service.js
index db481c54f70f16538d51f88a052375ebb55dd660..9844927f34e53764006173065c9231b4bf6c7d7d 100644
--- a/services/apm/apm.service.js
+++ b/services/apm/apm.service.js
@@ -4,8 +4,7 @@ const Joi = require('joi')
 const { renderLicenseBadge } = require('../../lib/licenses')
 const { renderVersionBadge } = require('../../lib/version')
 const { metric } = require('../../lib/text-formatters')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['atom']
diff --git a/services/apm/apm.tester.js b/services/apm/apm.tester.js
index 9e659f87888e1a62e597f1cc9cfcd9a310462303..6a425a01412eaab497f93458ce10dc1b20b7f2c3 100644
--- a/services/apm/apm.tester.js
+++ b/services/apm/apm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 const { isMetric, isVPlusTripleDottedVersion } = require('../test-validators')
 
diff --git a/services/appveyor/appveyor-base.js b/services/appveyor/appveyor-base.js
index c3e773a558656db76003793e6a97cad228addc62..e8b1902434a06ba2a0e6978f26ddada1b14e9358 100644
--- a/services/appveyor/appveyor-base.js
+++ b/services/appveyor/appveyor-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const { isBuildStatus } = require('../../lib/build-status')
 
diff --git a/services/appveyor/appveyor-ci.tester.js b/services/appveyor/appveyor-ci.tester.js
index d7749551311ec1f5fe76c61f94cfb6ebaa57dffd..d5325bb8b26e46629c1279bda380c349e9b08573 100644
--- a/services/appveyor/appveyor-ci.tester.js
+++ b/services/appveyor/appveyor-ci.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('CI status')
   .get('/gruntjs/grunt.json')
diff --git a/services/appveyor/appveyor-tests.tester.js b/services/appveyor/appveyor-tests.tester.js
index 71fe23564937b5a2ff8866e5c7fd160af91e0f9f..4260c1e34199aa2069844e6658aef223b0ae28dc 100644
--- a/services/appveyor/appveyor-tests.tester.js
+++ b/services/appveyor/appveyor-tests.tester.js
@@ -18,7 +18,7 @@ const isCompactCustomAppveyorTestTotals = Joi.string().regex(
   /^💃 [0-9]+( \| 🤦‍♀️ [0-9]+)?( \| 🤷 [0-9]+)?$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Test status')
   .get('/NZSmartie/coap-net-iu0to.json')
diff --git a/services/aur/aur.service.js b/services/aur/aur.service.js
index 9a2e8fd93f9474212913628ac6b480388202217d..1b1e4d304ab09a7722dd31d2000022badb884418 100644
--- a/services/aur/aur.service.js
+++ b/services/aur/aur.service.js
@@ -3,8 +3,7 @@
 const Joi = require('joi')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 const { addv, metric } = require('../../lib/text-formatters')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const aurSchema = Joi.object({
diff --git a/services/aur/aur.tester.js b/services/aur/aur.tester.js
index 831200e464162dbd69e2da6efb6f1f06aaab9f88..216361f8d97acd2f201033257211eca5339c6d5f 100644
--- a/services/aur/aur.tester.js
+++ b/services/aur/aur.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
   isMetric,
diff --git a/services/azure-devops/azure-devops-base.js b/services/azure-devops/azure-devops-base.js
index 2f56a4859e575ee7965401eb0534cb0892e1edac..a628e97fbf83c4e0831f8e035fc3be28adf0b691 100644
--- a/services/azure-devops/azure-devops-base.js
+++ b/services/azure-devops/azure-devops-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const latestBuildSchema = Joi.object({
   count: Joi.number().required(),
diff --git a/services/azure-devops/azure-devops-build.service.js b/services/azure-devops/azure-devops-build.service.js
index 80f6f420dd6cc19492709d3b2b8b0d49067d24fa..ad61500d00794a72d66d17b3d32ff9e8c0a1c409 100644
--- a/services/azure-devops/azure-devops-build.service.js
+++ b/services/azure-devops/azure-devops-build.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const BaseSvgService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const { keywords, fetch } = require('./azure-devops-helpers')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
 
diff --git a/services/azure-devops/azure-devops-build.tester.js b/services/azure-devops/azure-devops-build.tester.js
index dcc0f79f42dc8f5d5d123942fbaf65d2fac7a24c..3d26683e3134d47b51606aed2b4ecd4c3859c75d 100644
--- a/services/azure-devops/azure-devops-build.tester.js
+++ b/services/azure-devops/azure-devops-build.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('default branch')
   .get(
diff --git a/services/azure-devops/azure-devops-coverage.tester.js b/services/azure-devops/azure-devops-coverage.tester.js
index 95fd8895d3590b3b1fedaad7991764bb7a195074..2fff1e6d1aca2e9eda85ac20c23d01933bc57ca5 100644
--- a/services/azure-devops/azure-devops-coverage.tester.js
+++ b/services/azure-devops/azure-devops-coverage.tester.js
@@ -53,7 +53,7 @@ const secondLinesCovStat = {
 const expCoverageSingleReport = '83%'
 const expCoverageMultipleReports = '77%'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('default branch coverage')
   .get(`${uriPrefix}/${linuxDefinitionId}.json`)
diff --git a/services/azure-devops/azure-devops-release.tester.js b/services/azure-devops/azure-devops-release.tester.js
index d63042f102c0f77dab150fe335a626d7d9ed8614..72a213ece4848c6ed88726e8e7a599e43800c145 100644
--- a/services/azure-devops/azure-devops-release.tester.js
+++ b/services/azure-devops/azure-devops-release.tester.js
@@ -6,7 +6,7 @@ const { isBuildStatus } = require('../../lib/build-status')
 // https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
 // solely created for Shields.io testing.
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('release status is succeeded')
   .get(
diff --git a/services/azure-devops/azure-devops-tests.tester.js b/services/azure-devops/azure-devops-tests.tester.js
index 2ad733cb0934bc21141f092b70c6c1900451b251..1cad65dc047bd9f1115da0b171450f19d7c0b2f1 100644
--- a/services/azure-devops/azure-devops-tests.tester.js
+++ b/services/azure-devops/azure-devops-tests.tester.js
@@ -113,7 +113,7 @@ const isCompactCustomAzureDevOpsTestTotals = isAzureDevOpsTestTotals(
   true
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('unknown build definition')
   .get(`${uriPrefix}/${nonExistentDefinitionId}.json`)
diff --git a/services/beerpay/beerpay.service.js b/services/beerpay/beerpay.service.js
index dc3e1cf6f996002458be43bb34da718f77a46f0a..8b2f991b2641f93a7b60642f09af9b6e29112ffe 100644
--- a/services/beerpay/beerpay.service.js
+++ b/services/beerpay/beerpay.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   total_amount: Joi.number()
diff --git a/services/beerpay/beerpay.tester.js b/services/beerpay/beerpay.tester.js
index 6632a1b2a6813981168c5d175809980184186247..82568ace5d20f0e76d46bef81008853c6e23661e 100644
--- a/services/beerpay/beerpay.tester.js
+++ b/services/beerpay/beerpay.tester.js
@@ -5,7 +5,7 @@ const { withRegex } = require('../test-validators')
 
 const amountOfMoney = withRegex(/^\$[0-9]+(\.[0-9]+)?/)
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('funding')
   .get('/hashdog/scrapfy-chrome-extension.json')
diff --git a/services/bintray/bintray.service.js b/services/bintray/bintray.service.js
index d5f71ff239b1ab8736fa179114585f628f10b7e8..d71465eb16677c84469d74ad73e5850ff8212019 100644
--- a/services/bintray/bintray.service.js
+++ b/services/bintray/bintray.service.js
@@ -3,8 +3,8 @@
 const Joi = require('joi')
 
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object()
   .keys({
diff --git a/services/bintray/bintray.tester.js b/services/bintray/bintray.tester.js
index 63b8d73566290b461c5643f52daf351c27e2cf03..c84b3627c4890d59291b6ef615cecd2302864435 100644
--- a/services/bintray/bintray.tester.js
+++ b/services/bintray/bintray.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version')
   .get('/asciidoctor/maven/asciidoctorj.json')
diff --git a/services/bitbucket/bitbucket-issues.service.js b/services/bitbucket/bitbucket-issues.service.js
index 0917b48f330276b5b0681446aafead846892430b..38bbca29416a5f6efafb49984f8b514b0b8f1433 100644
--- a/services/bitbucket/bitbucket-issues.service.js
+++ b/services/bitbucket/bitbucket-issues.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const bitbucketIssuesSchema = Joi.object({
diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js
index d1253d45812fde9718671f6ceaf5869258f1c0ae..f5c19eca69d5c6ba70951a456463575344cfda74 100644
--- a/services/bitbucket/bitbucket-pipelines.service.js
+++ b/services/bitbucket/bitbucket-pipelines.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const bitbucketPipelinesSchema = Joi.object({
   values: Joi.array()
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index 0c6f610984f1c27ef00e13a8810087347c27e3e5..496983e5bf8b37740678168dc023bd7d05fcf84a 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
 const { metric } = require('../../lib/text-formatters')
 const { nonNegativeInteger } = require('../validators')
+const { BaseJsonService } = require('..')
 
 const bitbucketPullRequestSchema = Joi.object({
   size: nonNegativeInteger,
diff --git a/services/bitbucket/bitbucket.tester.js b/services/bitbucket/bitbucket.tester.js
index 75601ef8d33542b3548936548215ea406b35cadf..b9c73f3d2ce52398563a75b5e8eef744e595adc0 100644
--- a/services/bitbucket/bitbucket.tester.js
+++ b/services/bitbucket/bitbucket.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   mockBitbucketCreds,
   mockBitbucketServerCreds,
diff --git a/services/bithound/bithound.service.js b/services/bithound/bithound.service.js
index 7c090dee8d23f0329b38cbdd34f19dadfc8a55b5..0a301c300eddd579b717a2350bd44c4d567ed177 100644
--- a/services/bithound/bithound.service.js
+++ b/services/bithound/bithound.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // bitHound integration - deprecated as of July 2018
 module.exports = deprecatedService({
diff --git a/services/bithound/bithound.tester.js b/services/bithound/bithound.tester.js
index e4f65895f3da64077c93b237c82f41d4276b2bf4..5a9057e0f5e03b4a6737c8b870039520cd8654b9 100644
--- a/services/bithound/bithound.tester.js
+++ b/services/bithound/bithound.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bithound',
diff --git a/services/bitrise/bitrise.tester.js b/services/bitrise/bitrise.tester.js
index 86fad8afb7b2fe9763022049d83f2c4d8999133b..c978ab7077f4a098e46bbd2a8040d805503a6aed 100644
--- a/services/bitrise/bitrise.tester.js
+++ b/services/bitrise/bitrise.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bitrise',
diff --git a/services/bountysource/bountysource.service.js b/services/bountysource/bountysource.service.js
index e6cd100d1b50abd1cc4d22f407f49a4daba7d905..5f8538dabd68f5e95ec9c6de08f0f74d7faf924e 100644
--- a/services/bountysource/bountysource.service.js
+++ b/services/bountysource/bountysource.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
 const { metric } = require('../../lib/text-formatters')
diff --git a/services/bountysource/bountysource.tester.js b/services/bountysource/bountysource.tester.js
index df7b218b6fc16ac8343c5036bce247f8ddc5d05c..062aa4178c3276db91a8ebe24d65a9016181abdf 100644
--- a/services/bountysource/bountysource.tester.js
+++ b/services/bountysource/bountysource.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isMetric } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bountysource',
diff --git a/services/bower/bower-base.js b/services/bower/bower-base.js
index 3b73cf2c3702657dd3883f71a26ba5be4ad8d65e..5f81de29bb1e8f022790997a3fd040829772877a 100644
--- a/services/bower/bower-base.js
+++ b/services/bower/bower-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object()
   .keys({
diff --git a/services/bower/bower-version.service.js b/services/bower/bower-version.service.js
index 43b7d0c5ced8de879f532927bf1da3ff945004a9..9b4bc2059f0c07e4f19ffc765525882b313c7f65 100644
--- a/services/bower/bower-version.service.js
+++ b/services/bower/bower-version.service.js
@@ -2,7 +2,7 @@
 
 const BaseBowerService = require('./bower-base')
 const { renderVersionBadge } = require('../../lib/version')
-const { InvalidResponse } = require('../errors')
+const { InvalidResponse } = require('..')
 
 module.exports = class BowerVersion extends BaseBowerService {
   static get category() {
diff --git a/services/bower/bower.tester.js b/services/bower/bower.tester.js
index c67e2e84ae1c9b797f95ab3c69fe8418a9598711..7cd706821752f448265ef701e2f585ecb122fbc8 100644
--- a/services/bower/bower.tester.js
+++ b/services/bower/bower.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const isBowerPrereleaseVersion = Joi.string().regex(
diff --git a/services/bstats/bstats-players.service.js b/services/bstats/bstats-players.service.js
index d2966f725d6aa808ad0712f8cdcec604301ecba9..84b3ddd37e4388b6770c8893df7473669d827931 100644
--- a/services/bstats/bstats-players.service.js
+++ b/services/bstats/bstats-players.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 
-const Joi = require('joi')
 const schema = Joi.array()
   .items(Joi.array().items([Joi.number().required(), Joi.number().required()]))
   .required()
diff --git a/services/bstats/bstats-players.tester.js b/services/bstats/bstats-players.tester.js
index a43b53cc45ff5a14813cc9b4013513bc74f23388..637a65332e2026ad0986da38c2bf69930a43f573 100644
--- a/services/bstats/bstats-players.tester.js
+++ b/services/bstats/bstats-players.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Players')
   .get('/1.json')
diff --git a/services/bstats/bstats-servers.service.js b/services/bstats/bstats-servers.service.js
index d47b4cf7ac80bfb24e6b6d17971f1cc542b678b5..6a5b71e928c7e26d3099eb728a407d852f3ef3a6 100644
--- a/services/bstats/bstats-servers.service.js
+++ b/services/bstats/bstats-servers.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 
-const Joi = require('joi')
 const schema = Joi.array()
   .items(Joi.array().items([Joi.number().required(), Joi.number().required()]))
   .required()
diff --git a/services/bstats/bstats-servers.tester.js b/services/bstats/bstats-servers.tester.js
index 803db610afc4580e4fc1cf2b4970440bde871771..34fda5a91d98254bbd6c3b025038586654564d36 100644
--- a/services/bstats/bstats-servers.tester.js
+++ b/services/bstats/bstats-servers.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Servers')
   .get('/1.json')
diff --git a/services/bugzilla/bugzilla.tester.js b/services/bugzilla/bugzilla.tester.js
index e746612920f3fdca19650a614d862f9c2c97c9b7..cc2664efc62be6a8b20f27aa4e4cbac0c5455cda 100644
--- a/services/bugzilla/bugzilla.tester.js
+++ b/services/bugzilla/bugzilla.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const bzBugStatus = Joi.equal(
   'unconfirmed',
diff --git a/services/buildkite/buildkite.tester.js b/services/buildkite/buildkite.tester.js
index d4c4f8b201719a0b4a69b82fbd06e1ea3187020b..9393761bf186f8dbe263b5f2c416d2204e812ccb 100644
--- a/services/buildkite/buildkite.tester.js
+++ b/services/buildkite/buildkite.tester.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-const { invalidJSON } = require('../response-fixtures')
 const { isBuildStatus } = require('../../lib/build-status')
+const { invalidJSON } = require('../response-fixtures')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'buildkite',
diff --git a/services/bundlephobia/bundlephobia.service.js b/services/bundlephobia/bundlephobia.service.js
index 9b8f283e1b3a27f029e0ef07d2c2731debed5b68..f27be57b54dc4225a1a8df53431dcae18a6e4292 100644
--- a/services/bundlephobia/bundlephobia.service.js
+++ b/services/bundlephobia/bundlephobia.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const prettyBytes = require('pretty-bytes')
-const LegacyService = require('../legacy-service')
 const { makeBadgeData: getBadgeData } = require('../../lib/badge-data')
+const LegacyService = require('../legacy-service')
 
 const keywords = ['node']
 
diff --git a/services/bundlephobia/bundlephobia.tester.js b/services/bundlephobia/bundlephobia.tester.js
index 4a519e93950b33a8cc874aaea16f1c900932c923..f4c8305d5e3b1aebc56d940a1b11852530e6e44b 100644
--- a/services/bundlephobia/bundlephobia.tester.js
+++ b/services/bundlephobia/bundlephobia.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isFileSize } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'bundlephobia',
diff --git a/services/cauditor/cauditor.service.js b/services/cauditor/cauditor.service.js
index b7eb3ba1d72ffa61385674a255dc9c111b17032c..697410537ff3ea48d853903eba7f62623410dec7 100644
--- a/services/cauditor/cauditor.service.js
+++ b/services/cauditor/cauditor.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'other',
diff --git a/services/cauditor/cauditor.tester.js b/services/cauditor/cauditor.tester.js
index b387ac4a19b30f43229904adac21ce4a4d463d2e..80e6a16e804d4de405519a0a5da228a32c06494e 100644
--- a/services/cauditor/cauditor.tester.js
+++ b/services/cauditor/cauditor.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'cauditor',
diff --git a/services/cdnjs/cdnjs.service.js b/services/cdnjs/cdnjs.service.js
index 275c2110b6a5f020a4724463a135ac16dc6a7183..c0754892de94ad3dbc533eba096343d275844e46 100644
--- a/services/cdnjs/cdnjs.service.js
+++ b/services/cdnjs/cdnjs.service.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const cdnjsSchema = Joi.object({
   // optional due to non-standard 'not found' condition
diff --git a/services/cdnjs/cdnjs.tester.js b/services/cdnjs/cdnjs.tester.js
index b79a697e80927cd5dfcfedb001e852a2b1e9d33a..6b4f5a833b68e17fb607621994f082b594c418d1 100644
--- a/services/cdnjs/cdnjs.tester.js
+++ b/services/cdnjs/cdnjs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('cdnjs (valid)')
   .get('/jquery.json')
diff --git a/services/chocolatey/chocolatey.tester.js b/services/chocolatey/chocolatey.tester.js
index cf123282832fb51534db58a28da33d79abbac512..064d8d7e6e13aa665235b6aaa164bdb0dea5dccd 100644
--- a/services/chocolatey/chocolatey.tester.js
+++ b/services/chocolatey/chocolatey.tester.js
@@ -1,7 +1,6 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
@@ -12,7 +11,7 @@ const {
   nuGetV2VersionJsonFirstCharZero,
   nuGetV2VersionJsonFirstCharNotZero,
 } = require('../nuget-fixtures')
-const { invalidJSON } = require('../response-fixtures')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'chocolatey',
@@ -34,22 +33,6 @@ t.create('total downloads (not found)')
   .get('/dt/not-a-real-package.json')
   .expectJSON({ name: 'downloads', value: 'not found' })
 
-t.create('total downloads (connection error)')
-  .get('/dt/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'downloads', value: 'inaccessible' })
-
-t.create('total downloads (unexpected response)')
-  .get('/dt/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'downloads', value: 'unparseable json response' })
-
 // version
 
 t.create('version (valid)')
@@ -110,22 +93,6 @@ t.create('version (not found)')
   .get('/v/not-a-real-package.json')
   .expectJSON({ name: 'chocolatey', value: 'not found' })
 
-t.create('version (connection error)')
-  .get('/v/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'chocolatey', value: 'inaccessible' })
-
-t.create('version (unexpected response)')
-  .get('/v/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'chocolatey', value: 'unparseable json response' })
-
 // version (pre)
 
 t.create('version (pre) (valid)')
@@ -185,19 +152,3 @@ t.create('version (pre) (mocked, blue badge)')
 t.create('version (pre) (not found)')
   .get('/vpre/not-a-real-package.json')
   .expectJSON({ name: 'chocolatey', value: 'not found' })
-
-t.create('version (pre) (connection error)')
-  .get('/vpre/scriptcs.json')
-  .networkOff()
-  .expectJSON({ name: 'chocolatey', value: 'inaccessible' })
-
-t.create('version (pre) (unexpected response)')
-  .get('/vpre/scriptcs.json')
-  .intercept(nock =>
-    nock('https://www.chocolatey.org')
-      .get(
-        '/api/v2/Packages()?%24filter=Id%20eq%20%27scriptcs%27%20and%20IsAbsoluteLatestVersion%20eq%20true'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'chocolatey', value: 'unparseable json response' })
diff --git a/services/chrome-web-store/chrome-web-store.tester.js b/services/chrome-web-store/chrome-web-store.tester.js
index e7a5888b5b3c4f89fceaa29c19bf78314a24706e..833d8c9042852e01e99a83ba87b7a8c306535d11 100644
--- a/services/chrome-web-store/chrome-web-store.tester.js
+++ b/services/chrome-web-store/chrome-web-store.tester.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
 const {
   isVPlusDottedVersionAtLeastOne,
   isStarRating,
   isMetric,
 } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'chrome-web-store',
diff --git a/services/cii-best-practices/cii-best-practices.service.js b/services/cii-best-practices/cii-best-practices.service.js
index 18f2e194ac2b308ddee2741a7d3219fd69fb3b1f..3b99ef99ddfc2cda0d22b38e9ca87dfb84320b31 100644
--- a/services/cii-best-practices/cii-best-practices.service.js
+++ b/services/cii-best-practices/cii-best-practices.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   colorScale,
   coveragePercentage: coveragePercentageColor,
 } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 
 const ciiBestPracticesSchema = Joi.object({
   badge_level: Joi.string().required(),
diff --git a/services/cii-best-practices/cii-best-practices.tester.js b/services/cii-best-practices/cii-best-practices.tester.js
index 32c90c4cd441be32857965cfa17cf0720d2c07df..5c7a78aee298f4e36e2fa319dcd47655eae10777 100644
--- a/services/cii-best-practices/cii-best-practices.tester.js
+++ b/services/cii-best-practices/cii-best-practices.tester.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const t = require('../create-service-tester')()
 const { withRegex } = require('../test-validators')
-module.exports = t
+
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: level known project')
   .get(`/level/1.json`)
diff --git a/services/circleci/circleci.service.js b/services/circleci/circleci.service.js
index 8df0b1b3a5b749edb3256725201cd1cbb7b6ce54..5bb6c6a876584742e7be4497b4efa633dd741206 100644
--- a/services/circleci/circleci.service.js
+++ b/services/circleci/circleci.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const circleSchema = Joi.array()
   .items(Joi.object({ status: isBuildStatus }))
diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js
index 7621a48d79e845f6949923307681d5b98668c3c5..807e7714428a1a69a504cb28481cc35f8514405e 100644
--- a/services/circleci/circleci.tester.js
+++ b/services/circleci/circleci.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'circleci',
diff --git a/services/clojars/clojars-downloads.service.js b/services/clojars/clojars-downloads.service.js
index 8158c5258025ffa5be1f665912ec29d181a99c3a..f1282773f224e950dc3d227a220855c54b3cfe2d 100644
--- a/services/clojars/clojars-downloads.service.js
+++ b/services/clojars/clojars-downloads.service.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
-const { nonNegativeInteger } = require('../validators')
 const { downloadCount: downloadsColor } = require('../../lib/color-formatters')
+const { nonNegativeInteger } = require('../validators')
+const { BaseJsonService } = require('..')
 
 const clojarsSchema = Joi.object({
   downloads: nonNegativeInteger,
diff --git a/services/clojars/clojars-downloads.tester.js b/services/clojars/clojars-downloads.tester.js
index f1d83cbe73453ee1c31dc33df3f1f7f2fe5a8431..f06f4174b2ed88f52cb73f35290b88ad346b9919 100644
--- a/services/clojars/clojars-downloads.tester.js
+++ b/services/clojars/clojars-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('clojars downloads (valid)')
   .get('/prismic.json')
diff --git a/services/clojars/clojars-version.service.js b/services/clojars/clojars-version.service.js
index c4ae6d3f6d724f8b9b786244e750d45040e096a7..deae4dbd0cb34da2c20723bf035886b85f988878 100644
--- a/services/clojars/clojars-version.service.js
+++ b/services/clojars/clojars-version.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
 const { version: versionColor } = require('../../lib/color-formatters')
+const { BaseJsonService, NotFound } = require('..')
 
 const clojarsSchema = Joi.object({
   // optional due to non-standard 'not found' condition
diff --git a/services/clojars/clojars-version.tester.js b/services/clojars/clojars-version.tester.js
index f21d558e01ad470d7ed29e987f8457787b5fdabd..078acaf85bcc9d46762d214cdd4935be8e4f9d25 100644
--- a/services/clojars/clojars-version.tester.js
+++ b/services/clojars/clojars-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('clojars (valid)')
   .get('/prismic.json')
diff --git a/services/cocoapods/cocoapods-apps.service.js b/services/cocoapods/cocoapods-apps.service.js
index cc4c68b60fa06df7dcdc5ed6c174fb275a514890..6bb4247f938c335cc7fca1b03e003fd5ec460933 100644
--- a/services/cocoapods/cocoapods-apps.service.js
+++ b/services/cocoapods/cocoapods-apps.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'other',
diff --git a/services/cocoapods/cocoapods-apps.tester.js b/services/cocoapods/cocoapods-apps.tester.js
index 7b05144b80a3741c0d54180f6e8f16a89f5e8731..43b36324a72968cba73dd0596d2e5013321138c4 100644
--- a/services/cocoapods/cocoapods-apps.tester.js
+++ b/services/cocoapods/cocoapods-apps.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsApps',
   title: 'CocoapodsApps',
diff --git a/services/cocoapods/cocoapods-downloads.service.js b/services/cocoapods/cocoapods-downloads.service.js
index f5659107568358f6490a5a84984ca6bbc07a8177..802003bb493b031720a57f3e3a2a6531a24e8e7d 100644
--- a/services/cocoapods/cocoapods-downloads.service.js
+++ b/services/cocoapods/cocoapods-downloads.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'downloads',
diff --git a/services/cocoapods/cocoapods-downloads.tester.js b/services/cocoapods/cocoapods-downloads.tester.js
index 4169b581ec6364785dc7a2c9cdad27a9f1ac853f..ef534d023da89797dd37fb96b0521466ea75ad73 100644
--- a/services/cocoapods/cocoapods-downloads.tester.js
+++ b/services/cocoapods/cocoapods-downloads.tester.js
@@ -1,6 +1,7 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+
 const t = (module.exports = new ServiceTester({
   id: 'CocoapodsDownloads',
   title: 'CocoapodsDownloads',
diff --git a/services/cocoapods/cocoapods-license.tester.js b/services/cocoapods/cocoapods-license.tester.js
index 0a1783801c25e3a8385458ce50d3f8f2bacf988f..282b10d43ddfcf8f8f6324277111edae74cc6c95 100644
--- a/services/cocoapods/cocoapods-license.tester.js
+++ b/services/cocoapods/cocoapods-license.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-metrics.tester.js b/services/cocoapods/cocoapods-metrics.tester.js
index 52134e8b9a668e1978f5e2bdabe1d283167dcf74..5ea55a2504e0d42934bfcb8474700fa7d139aebf 100644
--- a/services/cocoapods/cocoapods-metrics.tester.js
+++ b/services/cocoapods/cocoapods-metrics.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('doc percent (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-platform.tester.js b/services/cocoapods/cocoapods-platform.tester.js
index 2327da596e969cfbab44f90f7b0187c4c8203a87..9f3b9fed5995f99caf7e5d71b093684d6aa9fe2e 100644
--- a/services/cocoapods/cocoapods-platform.tester.js
+++ b/services/cocoapods/cocoapods-platform.tester.js
@@ -7,7 +7,7 @@ const isPlatform = Joi.string().regex(
   /^(osx|ios|tvos|watchos)( \| (osx|ios|tvos|watchos))*$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('platform (valid)')
   .get('/AFNetworking.json')
diff --git a/services/cocoapods/cocoapods-version.tester.js b/services/cocoapods/cocoapods-version.tester.js
index 831d4a96f5b2833676ea8c6ca0a093437ed634c7..547e7b462942892c297f610667e89de769903990 100644
--- a/services/cocoapods/cocoapods-version.tester.js
+++ b/services/cocoapods/cocoapods-version.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/AFNetworking.json')
diff --git a/services/codacy/codacy-coverage.service.js b/services/codacy/codacy-coverage.service.js
index 00d7ca276e899ac5f6ca47c6dfb74c0f5e6055c4..adc9a4718b4dd2647b8687d3823d9e568e46280b 100644
--- a/services/codacy/codacy-coverage.service.js
+++ b/services/codacy/codacy-coverage.service.js
@@ -4,8 +4,8 @@ const Joi = require('joi')
 const {
   coveragePercentage: coveragePercentageColor,
 } = require('../../lib/color-formatters')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
+const { BaseSvgScrapingService } = require('..')
+const { NotFound } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/codacy/codacy-coverage.tester.js b/services/codacy/codacy-coverage.tester.js
index c42405a66715555559c6c2a8a7b6ca59e76576b2..fc82b94bfbda1a7c14cae1d3d8fd2839e1a13858 100644
--- a/services/codacy/codacy-coverage.tester.js
+++ b/services/codacy/codacy-coverage.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Coverage')
   .get('/59d607d0e311408885e418004068ea58.json')
diff --git a/services/codacy/codacy-grade.service.js b/services/codacy/codacy-grade.service.js
index d83bfa59aa772c682b45352d2f822374ba3b91b2..3a58d738c0f9e24e7742beac7578c844a25213de 100644
--- a/services/codacy/codacy-grade.service.js
+++ b/services/codacy/codacy-grade.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
+const { BaseSvgScrapingService } = require('..')
 const { codacyGrade } = require('./codacy-helpers')
 
 const schema = Joi.object({ message: codacyGrade }).required()
diff --git a/services/codacy/codacy-grade.tester.js b/services/codacy/codacy-grade.tester.js
index 49af7da4b8700eae1c8c34c05f960fc5c16dbfaa..481fbf952367d3af788a4b108d2c6fe6f1f273ef 100644
--- a/services/codacy/codacy-grade.tester.js
+++ b/services/codacy/codacy-grade.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { codacyGrade } = require('./codacy-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Code quality')
   .get('/grade/e27821fb6289410b8f58338c7e0bc686.json')
diff --git a/services/codeclimate/codeclimate.tester.js b/services/codeclimate/codeclimate.tester.js
index 46302d41a35bf107097f95be19af272df7985241..520fcfe587531f3ee520870d97b85af50bdc7b31 100644
--- a/services/codeclimate/codeclimate.tester.js
+++ b/services/codeclimate/codeclimate.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codecov/codecov.tester.js b/services/codecov/codecov.tester.js
index 7fdd5b23c9a2d6496028adf705b18c5196bcaa2b..63f6f621b7ca10b67242ddcd2a727327f1fcb188 100644
--- a/services/codecov/codecov.tester.js
+++ b/services/codecov/codecov.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/codeship/codeship.tester.js b/services/codeship/codeship.tester.js
index ef24e093b5e8e41ff1079ad06d32a0c0141c0d0d..efb0579187c923199698cc0859422f01ca7a4cfb 100644
--- a/services/codeship/codeship.tester.js
+++ b/services/codeship/codeship.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'codeship',
diff --git a/services/codetally/codetally.service.js b/services/codetally/codetally.service.js
index d05bd7bc84a56d19124c0f3c29f0b43a717b4edd..fcf0615c1b5cf136dd269a46ea74b82f847c979f 100644
--- a/services/codetally/codetally.service.js
+++ b/services/codetally/codetally.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   currency_sign: Joi.string().required(),
diff --git a/services/codetally/codetally.tester.js b/services/codetally/codetally.tester.js
index 41384e9bd07d416a32abdd8baa3bbb7feaa1e07a..d9f155b6d9441427179e881f8fac24e711f88ede 100644
--- a/services/codetally/codetally.tester.js
+++ b/services/codetally/codetally.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // This test will extract the currency value from the
 // string value response from the server.
diff --git a/services/conda/conda-base.js b/services/conda/conda-base.js
index 173a4b14ed257bdc0ff7566c4f660361a517f071..01812ef460e2586abcb96f8cf2c51031f91e0023 100644
--- a/services/conda/conda-base.js
+++ b/services/conda/conda-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const condaSchema = Joi.object({
diff --git a/services/conda/conda.tester.js b/services/conda/conda.tester.js
index f3039fcb6347d2ab1653de4134faeeb1054efeed..f365ada075f0b48d390f0b1a1e137ab18043c7df 100644
--- a/services/conda/conda.tester.js
+++ b/services/conda/conda.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion, isMetric } = require('../test-validators')
 
 const isCondaPlatform = Joi.string().regex(/^\w+-\d+( \| \w+-\d+)*$/)
diff --git a/services/continuousphp/continuousphp.tester.js b/services/continuousphp/continuousphp.tester.js
index d403557be68fd3b072f99a1918714d574aa2ea2e..9b4aa85fd52553568735294920b572e1579ce7da 100644
--- a/services/continuousphp/continuousphp.tester.js
+++ b/services/continuousphp/continuousphp.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status on default branch')
   .get('/git-hub/doctrine/dbal.json')
diff --git a/services/cookbook/cookbook.tester.js b/services/cookbook/cookbook.tester.js
index 88df4d112f0e09f9402daeb2aed228e5657de53d..61a180d25fff427563d305286b2ee45b1e2629f5 100644
--- a/services/cookbook/cookbook.tester.js
+++ b/services/cookbook/cookbook.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version')
   .get('/chef-sugar.json')
diff --git a/services/coveralls/coveralls.tester.js b/services/coveralls/coveralls.tester.js
index a6805b1cb9a6dfb44a4a7252a6cbb5f36e0efc4e..d5f079a2e5835aaac1ef926071c90d4ebd1e5048 100644
--- a/services/coveralls/coveralls.tester.js
+++ b/services/coveralls/coveralls.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isIntegerPercentage } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'coveralls',
diff --git a/services/coverity/coverity-on-demand.service.js b/services/coverity/coverity-on-demand.service.js
index 1e816c49991b1ed67dc26f9eaa58a6a5f91eadee..317f1c31bfd0398c534216c59458d3c105bd2085 100644
--- a/services/coverity/coverity-on-demand.service.js
+++ b/services/coverity/coverity-on-demand.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // coverity on demand integration - deprecated as of December 2018.
 module.exports = deprecatedService({
diff --git a/services/coverity/coverity-on-demand.tester.js b/services/coverity/coverity-on-demand.tester.js
index a63670c82975a9cab7ad7dc9e5aa32342ec63c60..eb25cc97c8eefdb8bde099d3ca00578548d5c2f8 100644
--- a/services/coverity/coverity-on-demand.tester.js
+++ b/services/coverity/coverity-on-demand.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityOnDemand',
diff --git a/services/coverity/coverity-scan.service.js b/services/coverity/coverity-scan.service.js
index 80f20e1d0fcd7b1d50d3cfbc5c98d06e2cb7e46a..f1156b4f79cc81fb40cd41b27094653b599ef17e 100644
--- a/services/coverity/coverity-scan.service.js
+++ b/services/coverity/coverity-scan.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // coverity scan integration -
 // **temporarily deprecated as of January 2019 due to extended outage**
diff --git a/services/coverity/coverity-scan.tester.js b/services/coverity/coverity-scan.tester.js
index 7134f8dd94106a20cf5795e41d0477755e55b229..f2ef041e39de61a8cd903db9c8e347a245cdc389 100644
--- a/services/coverity/coverity-scan.tester.js
+++ b/services/coverity/coverity-scan.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'CoverityScan',
diff --git a/services/cpan/cpan-license.tester.js b/services/cpan/cpan-license.tester.js
index 274d98392e0ba90a8a8761e71abf56b68ae9cc0d..95831ec71dbfa4190f1d1e6a08e01e3baa9f9b8d 100644
--- a/services/cpan/cpan-license.tester.js
+++ b/services/cpan/cpan-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cpan/cpan-version.tester.js b/services/cpan/cpan-version.tester.js
index 68c4affedea0e0707b08cbff761294dec8d0b2e6..4a5d5de5a95b8e216cd78a2234a7f3aafbe20236 100644
--- a/services/cpan/cpan-version.tester.js
+++ b/services/cpan/cpan-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/Config-Augeas.json')
diff --git a/services/cpan/cpan.js b/services/cpan/cpan.js
index f4bbdfefabfffe119a0556f83fd16479e32065c1..2d0b760d27be668666cef343f01daee26b20a47b 100644
--- a/services/cpan/cpan.js
+++ b/services/cpan/cpan.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   version: Joi.string().required(),
diff --git a/services/cran/cran.service.js b/services/cran/cran.service.js
index c7325af9bedacc1f52a641d1e115a800a20dfc9b..4d306fa5a33498edb7fcce5d88ee1a28834845e3 100644
--- a/services/cran/cran.service.js
+++ b/services/cran/cran.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { renderVersionBadge } = require('../../lib/version')
 
 const schema = Joi.object({
diff --git a/services/cran/cran.tester.js b/services/cran/cran.tester.js
index e33b770e85b2e9a7038536d00883ad6a46052d78..f7b6dfc262332c7ae59782f64aebed1d6a410ac4 100644
--- a/services/cran/cran.tester.js
+++ b/services/cran/cran.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-base.js b/services/crates/crates-base.js
index cd768bfc95cca88a3f7948d33538bcf94125c875..b8602970fce2e1b48fe1d1e810daf297e318ce4b 100644
--- a/services/crates/crates-base.js
+++ b/services/crates/crates-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['Rust']
diff --git a/services/crates/crates-downloads.tester.js b/services/crates/crates-downloads.tester.js
index 42531cd3683ca7275a3816c1e2ea22be6cd1fef4..e7419e917a26fd29cb464d1b162c48ca71b0e432 100644
--- a/services/crates/crates-downloads.tester.js
+++ b/services/crates/crates-downloads.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/crates/crates-license.tester.js b/services/crates/crates-license.tester.js
index 7b5ba9c5ae7b1e3c01c3edb6b1c30f8fd1325a41..796372ff9f60f7aad035e6c70de22e05ab7f1f15 100644
--- a/services/crates/crates-license.tester.js
+++ b/services/crates/crates-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'crates',
diff --git a/services/crates/crates-version.tester.js b/services/crates/crates-version.tester.js
index e0118a10c85d972c03fa8b8f7d553e88f1729638..0edb46e02e9f6640a64767b907237fc29263dd7e 100644
--- a/services/crates/crates-version.tester.js
+++ b/services/crates/crates-version.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/ctan/ctan.service.js b/services/ctan/ctan.service.js
index c56891ce34efb94928897f17649452c9f46d20ec..0c1deab77083924ff1ab81b9ceebf08ea89cfdbd 100644
--- a/services/ctan/ctan.service.js
+++ b/services/ctan/ctan.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderLicenseBadge } = require('../../lib/licenses')
 const { renderVersionBadge } = require('../../lib/version')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   license: Joi.array()
diff --git a/services/ctan/ctan.tester.js b/services/ctan/ctan.tester.js
index 56023c0a9074df5dfcd6ff1e9279a7ccf62d6f6f..ffeb0e0a1ac9163779dc17bcee0722fc8f50c08a 100644
--- a/services/ctan/ctan.tester.js
+++ b/services/ctan/ctan.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/date/date.service.js b/services/date/date.service.js
index 333254fa6cedbda48f73ab82d158f8d941c93109..263c35543020b75f7d49726ff93762201b73673a 100644
--- a/services/date/date.service.js
+++ b/services/date/date.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const BaseService = require('../base')
 const { formatRelativeDate } = require('../../lib/text-formatters')
+const { BaseService } = require('..')
 
 const documentation = `
 <p>
diff --git a/services/date/date.tester.js b/services/date/date.tester.js
index 759262ed041f6188a2d7499423eb3631beb7ad51..ee9bf661bca3cfdb8e7cc4260dd20775a5c50900 100644
--- a/services/date/date.tester.js
+++ b/services/date/date.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isRelativeFormattedDate } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'date', title: 'Relative Date Tests' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'date',
+  title: 'Relative Date Tests',
+}))
 
 t.create('Relative date')
   .get('/1540814400.json')
diff --git a/services/david/david.tester.js b/services/david/david.tester.js
index a12f45f6215ac24993d7f2be50410fac4bd182a2..7c22cb9c1836cc1dfbabe1dfab3aadbe6f446bca 100644
--- a/services/david/david.tester.js
+++ b/services/david/david.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
 const isDependencyStatus = Joi.string().valid(
diff --git a/services/debug/debug.service.js b/services/debug/debug.service.js
index a8754b991c44e690040e32998f81f2107f4f937c..ea7390f5b8b77dd26f6745a6ac4032f7d56496b4 100644
--- a/services/debug/debug.service.js
+++ b/services/debug/debug.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const NonMemoryCachingBaseService = require('../base-non-memory-caching')
+const { NonMemoryCachingBaseService } = require('..')
 
 const serverStartTime = new Date(new Date().toGMTString())
 
diff --git a/services/debug/debug.tester.js b/services/debug/debug.tester.js
index c4b85a22c6c8061511f16b3ee3309c07815428d9..f962b53b1f27b0d8295dcbbc9d25ecbe02f03976 100644
--- a/services/debug/debug.tester.js
+++ b/services/debug/debug.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('start time')
   .get('/starttime.json')
diff --git a/services/dependabot/dependabot.service.js b/services/dependabot/dependabot.service.js
index 709aadff40c014eb1b556348cdcb877925433d11..eb93378699b0c84de49846abd3024c40db731f8e 100644
--- a/services/dependabot/dependabot.service.js
+++ b/services/dependabot/dependabot.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
 const url = require('url')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   status: Joi.string().required(),
diff --git a/services/dependabot/dependabot.tester.js b/services/dependabot/dependabot.tester.js
index 8c97ce730bcccf4c0f0fe8b5f2d8b8171bb9d13d..7a3f0f89f74e1780838b0733cb589660c23eb43d 100644
--- a/services/dependabot/dependabot.tester.js
+++ b/services/dependabot/dependabot.tester.js
@@ -1,16 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isIntegerPercentage } = require('../test-validators')
 
-const t = (module.exports = new ServiceTester({
-  id: 'dependabot',
-  title: 'Dependabot',
-}))
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('semver stability (valid)')
-  .get('/semver/bundler/puma.json')
+  .get('/bundler/puma.json')
   .expectJSONTypes(
     Joi.object().keys({
       name: 'semver stability',
@@ -21,7 +17,7 @@ t.create('semver stability (valid)')
   )
 
 t.create('semver stability (invalid error)')
-  .get('/semver/invalid-manager/puma.json?style=_shields_test')
+  .get('/invalid-manager/puma.json?style=_shields_test')
   .expectJSON({
     name: 'semver stability',
     value: 'invalid',
@@ -29,7 +25,7 @@ t.create('semver stability (invalid error)')
   })
 
 t.create('semver stability (missing dependency)')
-  .get('/semver/bundler/some-random-missing-dependency.json')
+  .get('/bundler/some-random-missing-dependency.json')
   .expectJSON({
     name: 'semver stability',
     value: 'unknown',
diff --git a/services/depfu/depfu.service.js b/services/depfu/depfu.service.js
index 09ba53ec3101e33aff229d82cc6423cd52ebd605..31445d8dc1df2336a02a321ce0cf60d2b9b68995 100644
--- a/services/depfu/depfu.service.js
+++ b/services/depfu/depfu.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const depfuSchema = Joi.object({
   text: Joi.string().required(),
diff --git a/services/depfu/depfu.tester.js b/services/depfu/depfu.tester.js
index 57a350bb0c4bfbc37b97ae0e051b8e5d21d5aee4..4778374ad275ab1e6b8fcb5bbc923ac9cd12d8e0 100644
--- a/services/depfu/depfu.tester.js
+++ b/services/depfu/depfu.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const isDependencyStatus = Joi.string().valid(
   'insecure',
diff --git a/services/discord/discord.service.js b/services/discord/discord.service.js
index 872e0c03ce5dcb9c1a49846139b387be9192d81a..84eb6302be5536b1dbc4537af24bce66ce717500 100644
--- a/services/discord/discord.service.js
+++ b/services/discord/discord.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const discordSchema = Joi.object({
   members: Joi.array()
diff --git a/services/discord/discord.tester.js b/services/discord/discord.tester.js
index c0df09b380cb6d985824e98618818a419bd344fb..a3ed95044616d209721764cdb3557cf34fae07d0 100644
--- a/services/discord/discord.tester.js
+++ b/services/discord/discord.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets status for Reactiflux')
   .get('/102860784329052160.json?style=_shields_test')
diff --git a/services/discourse/discourse.tester.js b/services/discourse/discourse.tester.js
index 04e894850297ef539604c2307e11f07d74be1376..bcb08c2a6407ffbc823eab3f7a2ef9b8e4383ec8 100644
--- a/services/discourse/discourse.tester.js
+++ b/services/discourse/discourse.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'discourse',
diff --git a/services/dockbit/dockbit.service.js b/services/dockbit/dockbit.service.js
index b8ae5c8bcef13378f6cde44572976db547f3e613..27473c5e2893e2fd637fd7e610536a39a231a97b 100644
--- a/services/dockbit/dockbit.service.js
+++ b/services/dockbit/dockbit.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 // dockbit integration - deprecated as of December 2017.
 module.exports = deprecatedService({
   category: 'build',
diff --git a/services/dockbit/dockbit.tester.js b/services/dockbit/dockbit.tester.js
index 306a38e7aefb766d7d5c5b4397169c9f3e5713be..c7474386a7e171aa2d6862b51ef8d9b71bb221db 100644
--- a/services/dockbit/dockbit.tester.js
+++ b/services/dockbit/dockbit.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'dockbit',
diff --git a/services/docker/docker-automated.service.js b/services/docker/docker-automated.service.js
index e4b63718939e664f344b2e4062d7fd0bd938e662..8725a509ba06750e06a998312209c22f9a5b32f7 100644
--- a/services/docker/docker-automated.service.js
+++ b/services/docker/docker-automated.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const {
   dockerBlue,
   buildDockerUrl,
diff --git a/services/docker/docker-automated.tester.js b/services/docker/docker-automated.tester.js
index 240d0e2a1cfdd2f0b3eb7ac8e96be2fe5fae803f..0242e147a9128c0383750c165b297b7b21c524b2 100644
--- a/services/docker/docker-automated.tester.js
+++ b/services/docker/docker-automated.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const isAutomatedBuildStatus = Joi.string().valid('automated', 'manual')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker automated build (valid, library)')
   .get('/_/ubuntu.json')
diff --git a/services/docker/docker-build.service.js b/services/docker/docker-build.service.js
index c5f748680d178e2332cae09cdc247a63e3d72299..42b793f51562079fa3ddf11b904b64a798ce80eb 100644
--- a/services/docker/docker-build.service.js
+++ b/services/docker/docker-build.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { anyInteger } = require('../validators')
 const {
   dockerBlue,
diff --git a/services/docker/docker-build.tester.js b/services/docker/docker-build.tester.js
index 9d04ce19ae62b9951abc945ce426765509b1b62b..ec2146128f78641e7c89ff04965ff22ea83e4435 100644
--- a/services/docker/docker-build.tester.js
+++ b/services/docker/docker-build.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker build status (valid, user)')
   .get('/jrottenberg/ffmpeg.json')
diff --git a/services/docker/docker-pulls.service.js b/services/docker/docker-pulls.service.js
index 43c08732b1409276cdeca3c9250c82edc7f5a18a..96deddfb8afef1859ebab983c2e36e9a59e5cd7b 100644
--- a/services/docker/docker-pulls.service.js
+++ b/services/docker/docker-pulls.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const {
   dockerBlue,
diff --git a/services/docker/docker-pulls.tester.js b/services/docker/docker-pulls.tester.js
index 708c17bbc9f28bd8d84181ebcda2d6026b224d5d..944b8b53225a7ef4a1acabeae5b78dc6a7557e6c 100644
--- a/services/docker/docker-pulls.tester.js
+++ b/services/docker/docker-pulls.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { dockerBlue } = require('./docker-helpers')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker pulls (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/docker/docker-stars.service.js b/services/docker/docker-stars.service.js
index 8d27132c1d8f0a0a2b4ea96c7eb82d87ed6d9164..f17b4016327ff8f400d8eba5e4c0a525d12dea60 100644
--- a/services/docker/docker-stars.service.js
+++ b/services/docker/docker-stars.service.js
@@ -1,13 +1,13 @@
 'use strict'
 
-const BaseService = require('../base')
 const { metric } = require('../../lib/text-formatters')
+const { BaseService } = require('..')
+const { nonNegativeInteger } = require('../validators')
 const {
   dockerBlue,
   buildDockerUrl,
   getDockerHubUser,
 } = require('./docker-helpers')
-const { nonNegativeInteger } = require('../validators')
 
 module.exports = class DockerStars extends BaseService {
   async fetch({ user, repo }) {
diff --git a/services/docker/docker-stars.tester.js b/services/docker/docker-stars.tester.js
index f23254494870c2136de5a8b7201cd808e7cdfa0d..eb1ff4bf64759588e81339feacdf5661383d4954 100644
--- a/services/docker/docker-stars.tester.js
+++ b/services/docker/docker-stars.tester.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const { dockerBlue } = require('./docker-helpers')
 const { isMetric } = require('../test-validators')
+const { dockerBlue } = require('./docker-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('docker stars (valid, library)')
   .get('/_/ubuntu.json?style=_shields_test')
diff --git a/services/dotnetstatus/dotnetstatus.service.js b/services/dotnetstatus/dotnetstatus.service.js
index 6e31da10349b153f921023a61b9bdf1a8b2aeabf..6811cb6102e9c1063e21de75c4b5bd29ab3e3a3b 100644
--- a/services/dotnetstatus/dotnetstatus.service.js
+++ b/services/dotnetstatus/dotnetstatus.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // dotnet-status integration - deprecated as of April 2018.
 module.exports = deprecatedService({
diff --git a/services/dotnetstatus/dotnetstatus.tester.js b/services/dotnetstatus/dotnetstatus.tester.js
index fa427f1adb03f1e7dcc95eb34a8fd1e00e8b42cd..000988ae2417ad43fc259518839e38194d30d3a6 100644
--- a/services/dotnetstatus/dotnetstatus.tester.js
+++ b/services/dotnetstatus/dotnetstatus.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'dotnetstatus',
diff --git a/services/dub/dub-download.service.js b/services/dub/dub-download.service.js
index 92682d535dd750b05607bf64e25f1377535dca1b..70a6eec3a0b001ac1be3c9f2ed4f75f8dbbc0128 100644
--- a/services/dub/dub-download.service.js
+++ b/services/dub/dub-download.service.js
@@ -1,11 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { downloadCount } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
@@ -43,7 +41,7 @@ function DownloadsForInterval(interval) {
       return {
         label,
         message: `${metric(downloads)}${messageSuffix}`,
-        color: downloadCountColor(downloads),
+        color: downloadCount(downloads),
       }
     }
 
diff --git a/services/dub/dub-download.tester.js b/services/dub/dub-download.tester.js
index ee24e9e05cd59408b57c889842740c45e5d0401c..bf8a5862c1a435637a05dd5b8424d71cd9f1eeac 100644
--- a/services/dub/dub-download.tester.js
+++ b/services/dub/dub-download.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isDownloadsColor = Joi.equal(
diff --git a/services/dub/dub-license.service.js b/services/dub/dub-license.service.js
index 147e06edef1698e35bb9d3ae3ec0aae1d5c1d0d8..ca064350ae9802b6cc24b7f782d256f1e09ee0b9 100644
--- a/services/dub/dub-license.service.js
+++ b/services/dub/dub-license.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderLicenseBadge } = require('../../lib/licenses')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   info: Joi.object({ license: Joi.string().required() }).required(),
diff --git a/services/dub/dub-license.tester.js b/services/dub/dub-license.tester.js
index 74f0f36156550bea15de978073b7508835cd7c12..bc0a266c92ea84fdba4d8800e5d98b9e80e53561 100644
--- a/services/dub/dub-license.tester.js
+++ b/services/dub/dub-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license (valid)')
   .get('/vibe-d.json')
diff --git a/services/dub/dub-version.service.js b/services/dub/dub-version.service.js
index fba0f01041a99094bfe4eb04ec277449bb0c5d33..c8acc910dd1d875769de22c89a00b2498c7e6f89 100644
--- a/services/dub/dub-version.service.js
+++ b/services/dub/dub-version.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { renderVersionBadge } = require('../../lib/version')
 
 const schema = Joi.string().required()
diff --git a/services/dub/dub-version.tester.js b/services/dub/dub-version.tester.js
index 20755e8e2df4b49f75ddca0b6da82a8cc5ccd433..5a7311693967eb26dd6323e23c28e50cb17189b3 100644
--- a/services/dub/dub-version.tester.js
+++ b/services/dub/dub-version.tester.js
@@ -5,7 +5,7 @@ const {
   isVPlusDottedVersionNClausesWithOptionalSuffix,
 } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/vibe-d.json?style=_shields_test')
diff --git a/services/dynamic/dynamic-json.service.js b/services/dynamic/dynamic-json.service.js
index c085d88054232b86ba72e2b709f63da0247eccbf..fe030afe1e7456703d9fe208e4e736598ef07733 100644
--- a/services/dynamic/dynamic-json.service.js
+++ b/services/dynamic/dynamic-json.service.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const jp = require('jsonpath')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-json.tester.js b/services/dynamic/dynamic-json.tester.js
index d1c06bec21d6ca29b91fb4f66d97aa7045eca0d1..e6add9fa838540436b34e6810f9a299540aa41e8 100644
--- a/services/dynamic/dynamic-json.tester.js
+++ b/services/dynamic/dynamic-json.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { expect } = require('chai')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Connection error')
   .get(
diff --git a/services/dynamic/dynamic-xml.service.js b/services/dynamic/dynamic-xml.service.js
index 30a6b4f467ecaedf87cd043168a996a36507e070..46d58757dcf28a01c76a7cd040d449ae152ff1ff 100644
--- a/services/dynamic/dynamic-xml.service.js
+++ b/services/dynamic/dynamic-xml.service.js
@@ -2,8 +2,7 @@
 
 const { DOMParser } = require('xmldom')
 const xpath = require('xpath')
-const BaseService = require('../base')
-const { InvalidResponse } = require('../errors')
+const { BaseService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-xml.tester.js b/services/dynamic/dynamic-xml.tester.js
index b3d4e74898696ae36408cdcc0f3d1b5d60a30a68..f5738fa1bf2e2e5e4af088aaf1884da5fdf5d669 100644
--- a/services/dynamic/dynamic-xml.tester.js
+++ b/services/dynamic/dynamic-xml.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { expect } = require('chai')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=//name&label=Package Name&style=_shields_test')
diff --git a/services/dynamic/dynamic-yaml.service.js b/services/dynamic/dynamic-yaml.service.js
index acc5f66d768105e4168ab8ed3e07f6b426e2e3fa..7f88443882f62d8dbb52160fdc077772936e037e 100644
--- a/services/dynamic/dynamic-yaml.service.js
+++ b/services/dynamic/dynamic-yaml.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const BaseYamlService = require('../base-yaml')
-const { InvalidResponse } = require('../errors')
 const Joi = require('joi')
 const jp = require('jsonpath')
+const { BaseYamlService, InvalidResponse } = require('..')
 const { renderDynamicBadge } = require('../dynamic-common')
 const {
   createRoute,
diff --git a/services/dynamic/dynamic-yaml.tester.js b/services/dynamic/dynamic-yaml.tester.js
index e1d543b7c46fe4782ffdd6a02a4ec0b7f81aefb2..9efd4f441453fdd3774b48d129cbc146b9fc967a 100644
--- a/services/dynamic/dynamic-yaml.tester.js
+++ b/services/dynamic/dynamic-yaml.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('No URL specified')
   .get('.json?query=$.name&label=Package Name&style=_shields_test')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-base.js b/services/eclipse-marketplace/eclipse-marketplace-base.js
index a5cefc43f2a455837e1d90751a85bcfa6277f7f0..fd8c5387b04f0b427523cbbe48e8b607a3595a0c 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-base.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseXmlService = require('../base-xml')
+const { BaseXmlService } = require('..')
 
 module.exports = class EclipseMarketplaceBase extends BaseXmlService {
   static buildRoute(base) {
diff --git a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
index 052b1b9c6d403af83cd0b685685eac77d9cc99e4..c06bfec0a1b360e0fd49dca048e93ae53215d9f2 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
index 4708383dad865893f927e0297e1663516e7d814c..658d3feac95181ad3dd70df19d4880295107e10f 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-favorites.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('favorites count')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
index e48fa456c1a7af5c60821ec6834b26c3df3042fc..b143a9777adbddcf81bf7575528ca1dd6a65265a 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-license.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('license')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
index 769816a04c8541b33cc261d094e75ffc2d5d8850..0f7b20cceecc13f66804feaaeb126f76710e689c 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-update.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('last update date')
   .get('/notepad4e.json')
diff --git a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
index 19299386ca6a08fa8a52d2cfd54de9d81f84e63c..14ac85b100fa871f345638cf01b3f2a617b1462d 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('marketplace version')
   .get('/notepad4e.json')
diff --git a/services/elm-package/elm-package.service.js b/services/elm-package/elm-package.service.js
index ee656adfd661506497cdccba599c82271e585304..994b697bad6455fb520e3335d0d341a126eb91f5 100644
--- a/services/elm-package/elm-package.service.js
+++ b/services/elm-package/elm-package.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { semver } = require('../validators')
 
 const schema = Joi.object({ version: semver }).required()
diff --git a/services/elm-package/elm-package.tester.js b/services/elm-package/elm-package.tester.js
index f86fe8aa8461d89cc3b18a32c5b0b78a5f19c234..d378ba4b0ff6db3a8a593cdc5ffdb56ddb1321e3 100644
--- a/services/elm-package/elm-package.tester.js
+++ b/services/elm-package/elm-package.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the package version of elm/core')
   .get('/elm/core.json')
diff --git a/services/f-droid/f-droid.service.js b/services/f-droid/f-droid.service.js
index 4db4dc266883a17127f44ab488bba0ed821caa8d..046bf92df9eabee30ecbf01e2f2a9e8038e344b7 100644
--- a/services/f-droid/f-droid.service.js
+++ b/services/f-droid/f-droid.service.js
@@ -1,10 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseYamlService = require('../base-yaml')
-const { addv: versionText } = require('../../lib/text-formatters')
+const { addv } = require('../../lib/text-formatters')
 const { version: versionColor } = require('../../lib/color-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseYamlService, InvalidResponse } = require('..')
 
 const schema = Joi.object({
   CurrentVersion: Joi.alternatives()
@@ -15,7 +14,7 @@ const schema = Joi.object({
 module.exports = class FDroid extends BaseYamlService {
   static render({ version }) {
     return {
-      message: versionText(version),
+      message: addv(version),
       color: versionColor(version),
     }
   }
diff --git a/services/f-droid/f-droid.tester.js b/services/f-droid/f-droid.tester.js
index 65510c37f45b0aa67a6edaf7a596ef0773f01836..5ce1831cfa974c78e3b9248725c4047b963fd555 100644
--- a/services/f-droid/f-droid.tester.js
+++ b/services/f-droid/f-droid.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/flip/flip.service.js b/services/flip/flip.service.js
index 07bcb963cf6f47c7dadfa41850047e598a22c3bd..6c0dc06c236118a67562b87b1f200284264a811b 100644
--- a/services/flip/flip.service.js
+++ b/services/flip/flip.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const NonMemoryCachingBaseService = require('../base-non-memory-caching')
+const { NonMemoryCachingBaseService } = require('..')
 
 let bitFlip = false
 
diff --git a/services/flip/flip.tester.js b/services/flip/flip.tester.js
index a89d983fe620c32d8c75b13ce533ec4d23b819e7..59b000b41b7a4b622339afcd5aa16eeeb1f930f8 100644
--- a/services/flip/flip.tester.js
+++ b/services/flip/flip.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('First request')
   .get('.json')
diff --git a/services/gem/gem-downloads.service.js b/services/gem/gem-downloads.service.js
index d536b87633e416147e126b2273b1acbca5d4613d..4dadd751cf4ad2819926df6a934df098bf5d4162 100644
--- a/services/gem/gem-downloads.service.js
+++ b/services/gem/gem-downloads.service.js
@@ -2,14 +2,10 @@
 
 const semver = require('semver')
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
-const {
-  downloadCount: downloadCountColor,
-} = require('../../lib/color-formatters')
+const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
 const { latest: latestVersion } = require('../../lib/version')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['ruby']
@@ -45,7 +41,7 @@ module.exports = class GemDownloads extends BaseJsonService {
     return {
       label,
       message: metric(downloads),
-      color: downloadCountColor(downloads),
+      color: downloadCount(downloads),
     }
   }
 
diff --git a/services/gem/gem-downloads.tester.js b/services/gem/gem-downloads.tester.js
index 0eda4f4df32da0205a2c5e415e7a3292fc30e738..f207f93d5672d05bd0924ad7efe24c2635807905 100644
--- a/services/gem/gem-downloads.tester.js
+++ b/services/gem/gem-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // total downloads
 t.create('total downloads (valid)')
diff --git a/services/gem/gem-owner.service.js b/services/gem/gem-owner.service.js
index a904979d1d16e9310148571b5952490fbb3db607..f241ab9271ca08bf44596ade89f18a38c5468434 100644
--- a/services/gem/gem-owner.service.js
+++ b/services/gem/gem-owner.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 
 const ownerSchema = Joi.array().required()
diff --git a/services/gem/gem-owner.tester.js b/services/gem/gem-owner.tester.js
index 0ab50b2c5042cb985f5f002dbbd35b58e714d57a..741dbfe129a5abea5544a5ab262cd288e29065ba 100644
--- a/services/gem/gem-owner.tester.js
+++ b/services/gem/gem-owner.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('users (valid)')
   .get('/raphink.json')
diff --git a/services/gem/gem-rank.service.js b/services/gem/gem-rank.service.js
index d64e41db55e77c030266fbab259168b418ae61cf..2e2e704fee5ccae335c082fcfa905e6e30bf1d0a 100644
--- a/services/gem/gem-rank.service.js
+++ b/services/gem/gem-rank.service.js
@@ -1,11 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { floorCount: floorCountColor } = require('../../lib/color-formatters')
+const { floorCount } = require('../../lib/color-formatters')
 const { ordinalNumber } = require('../../lib/text-formatters')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 
 const keywords = ['ruby']
 
@@ -55,7 +53,7 @@ module.exports = class GemRank extends BaseJsonService {
     message += period === 'rt' ? '' : ' daily'
     return {
       message,
-      color: floorCountColor(count, 10, 50, 100),
+      color: floorCount(count, 10, 50, 100),
     }
   }
 
diff --git a/services/gem/gem-rank.tester.js b/services/gem/gem-rank.tester.js
index 78b71bc103b4b1f2b6deea1f015d60d3ff4c1832..033841f4f016448f8d6279511e719effc31a7b70 100644
--- a/services/gem/gem-rank.tester.js
+++ b/services/gem/gem-rank.tester.js
@@ -7,7 +7,7 @@ const isOrdinalNumberDaily = Joi.string().regex(
   /^[1-9][0-9]*(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ) daily$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('total rank (valid)')
   .get('/rt/rspec-puppet-facts.json')
diff --git a/services/gem/gem-version.service.js b/services/gem/gem-version.service.js
index 9429b5a79c3bf29c75c2329df97b02ff0c38206e..bb384629cd121e2d973f66833f082d8cad6eb961 100644
--- a/services/gem/gem-version.service.js
+++ b/services/gem/gem-version.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-
 const { renderVersionBadge } = require('../../lib/version')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   // In most cases `version` will be a SemVer but the registry doesn't
diff --git a/services/gem/gem-version.tester.js b/services/gem/gem-version.tester.js
index 3e07347dcaa856e49bc3314057238843b63a64cb..f4a6ce93b140c3ea8334fcfdaf0209aa96bdbc9b 100644
--- a/services/gem/gem-version.tester.js
+++ b/services/gem/gem-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('version (valid)')
   .get('/formatador.json')
diff --git a/services/gemnasium/gemnasium.service.js b/services/gemnasium/gemnasium.service.js
index fb69a3649c4dc1b406a111dd5da009e0b7bfbd98..8a831dd4c4fc0f88bdf6d605961ec9e17396db71 100644
--- a/services/gemnasium/gemnasium.service.js
+++ b/services/gemnasium/gemnasium.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'dependencies',
diff --git a/services/gemnasium/gemnasium.tester.js b/services/gemnasium/gemnasium.tester.js
index 039042cbb67e3d208156328dd4cc46c0a3438749..d2954c05bc404f9c7019ec4f633093bf2673e93d 100644
--- a/services/gemnasium/gemnasium.tester.js
+++ b/services/gemnasium/gemnasium.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'gemnasium',
diff --git a/services/github/github-auth-service.js b/services/github/github-auth-service.js
index ee44fd4e12d116073d20fbbd9b89e62bb4cc4690..f9242d9a691e6a0f26165914c34c80eb4a8fbc37 100644
--- a/services/github/github-auth-service.js
+++ b/services/github/github-auth-service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { staticAuthConfigured } = require('./github-helpers')
 
 function createRequestFetcher(context, config) {
diff --git a/services/github/github-commit-activity.tester.js b/services/github/github-commit-activity.tester.js
index ed8b64223684a11a405f95ade77af8001a961a7c..68e3543e65342632a593c1115778265277cbd9b3 100644
--- a/services/github/github-commit-activity.tester.js
+++ b/services/github/github-commit-activity.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('commit activity (1 year)')
   .get('/y/eslint/eslint.json')
diff --git a/services/github/github-commit-status.tester.js b/services/github/github-commit-status.tester.js
index cf9857bea172295d3cc318ec9e444cb6e7ff8748..22100c4813d11f57f96ec46f16acb5b4ade8f972 100644
--- a/services/github/github-commit-status.tester.js
+++ b/services/github/github-commit-status.tester.js
@@ -2,7 +2,7 @@
 
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('commit status - commit in branch')
   .get(
diff --git a/services/github/github-commits-since.tester.js b/services/github/github-commits-since.tester.js
index 2673222373203adb3514d81e860c3b202b2cec5f..c9ddc8194d0f874ea7f811088d5e8630a7db0b19 100644
--- a/services/github/github-commits-since.tester.js
+++ b/services/github/github-commits-since.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Commits since')
   .get(
diff --git a/services/github/github-common-fetch.js b/services/github/github-common-fetch.js
index aff6d6ec1dc46a2c8f00e04c19fe921e6630562c..d1991c30ba216869622c6897136236fe8cc6f7d8 100644
--- a/services/github/github-common-fetch.js
+++ b/services/github/github-common-fetch.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const { InvalidResponse } = require('../errors')
+const { InvalidResponse } = require('..')
 const { errorMessagesFor } = require('./github-helpers')
 
 const issueSchema = Joi.object({
diff --git a/services/github/github-contributors.tester.js b/services/github/github-contributors.tester.js
index 16c5be054b4f10489f7ff842c69ffd041755c977..b9d30d02cc72a8382c129e372c038078212da21a 100644
--- a/services/github/github-contributors.tester.js
+++ b/services/github/github-contributors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 t.create('Contributors')
diff --git a/services/github/github-downloads.tester.js b/services/github/github-downloads.tester.js
index 3aea7188fd610313aadb36251fc39e7a8589de11..d1181384e27da7a6e3d8643eb16c4bded3ac1a3f 100644
--- a/services/github/github-downloads.tester.js
+++ b/services/github/github-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Downloads all releases')
   .get('/downloads/photonstorm/phaser/total.json')
diff --git a/services/github/github-followers.tester.js b/services/github/github-followers.tester.js
index f5bb037da56bd144ada41a0d24444dba1f5bd484..6b4f85e8d2a86d6f648083d017a742359689cb1a 100644
--- a/services/github/github-followers.tester.js
+++ b/services/github/github-followers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Followers')
   .get('/webcaetano.json')
diff --git a/services/github/github-forks.tester.js b/services/github/github-forks.tester.js
index fce3f0c14aab081ed32f56d5f941f01ba1b758fc..6dfbae5a2e8732a9251e8cddf46a29a833622210 100644
--- a/services/github/github-forks.tester.js
+++ b/services/github/github-forks.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Forks')
   .get('/badges/shields.json')
diff --git a/services/github/github-issue-detail.tester.js b/services/github/github-issue-detail.tester.js
index bbec485e0f322d6446e709c3c104c6b011ac9899..8ac4ce19cbb9de8278705969db38d7d02c0a5de8 100644
--- a/services/github/github-issue-detail.tester.js
+++ b/services/github/github-issue-detail.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('github issue state')
   .get('/s/badges/shields/979.json')
diff --git a/services/github/github-issues.tester.js b/services/github/github-issues.tester.js
index d6f9491a9ba30e8a75fd5a06ae542b54252e5aa8..488d579d2b925cbfd8fcdc9a5773846126083c50 100644
--- a/services/github/github-issues.tester.js
+++ b/services/github/github-issues.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric, isMetricOpenIssues } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('GitHub closed pull requests')
   .get('/issues-pr-closed/badges/shields.json')
diff --git a/services/github/github-languages.tester.js b/services/github/github-languages.tester.js
index b41f2f32fd704c49804fc05b3c14ba0a1f71f16d..ffbc8624c24b3f6aa7e4eb558e0c4219a47bb541 100644
--- a/services/github/github-languages.tester.js
+++ b/services/github/github-languages.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isFileSize } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-last-commit.tester.js b/services/github/github-last-commit.tester.js
index da5870fb1bcb29d21ed4cded2907de9ed37e6a01..e58084fff857c67971f68a5c416e6dd10f6e73f8 100644
--- a/services/github/github-last-commit.tester.js
+++ b/services/github/github-last-commit.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('last commit (recent)')
   .get('/eslint/eslint.json')
diff --git a/services/github/github-license.tester.js b/services/github/github-license.tester.js
index 90b58dac27fa5a419f7248f33e90cdd0cb7f95a6..d7e6b1c8fc90787885472fc8d911207ac888a18a 100644
--- a/services/github/github-license.tester.js
+++ b/services/github/github-license.tester.js
@@ -7,7 +7,7 @@ const permissiveLicenseColor = licenseToColor('MIT')
 const copyleftLicenseColor = licenseToColor('GPL-3.0')
 const unknownLicenseColor = licenseToColor()
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Public domain license')
   .get('/github/gitignore.json?style=_shields_test')
diff --git a/services/github/github-manifest.tester.js b/services/github/github-manifest.tester.js
index 55a77a5043b01eb6586f5100062ba7e3fd0f81ca..43afb4eecbbf044cdc7fc3ac81da47ed2cb69701 100644
--- a/services/github/github-manifest.tester.js
+++ b/services/github/github-manifest.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/github/github-package-json.tester.js b/services/github/github-package-json.tester.js
index d376bd1b02a035269d7c9a8b8cc674b5e6334bbc..3d3742ad22a208fbe9ff7a827043ca408c856561 100644
--- a/services/github/github-package-json.tester.js
+++ b/services/github/github-package-json.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 const { semverRange } = require('../validators')
 
diff --git a/services/github/github-pull-request-check-state.tester.js b/services/github/github-pull-request-check-state.tester.js
index 6e75e065e67e6f3590fdcee030400d9a2f9d8adb..64ba8e215973a0933f190e900d1f259be16757d2 100644
--- a/services/github/github-pull-request-check-state.tester.js
+++ b/services/github/github-pull-request-check-state.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('github pull request check state')
   .get('/s/pulls/badges/shields/1110.json')
diff --git a/services/github/github-release.tester.js b/services/github/github-release.tester.js
index 0a8e4fd138c1032eb2b046d83eecb6d45895895c..30ec7a04caf8d735871eb2b35e2945d2902aa9a6 100644
--- a/services/github/github-release.tester.js
+++ b/services/github/github-release.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFormattedDate } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Release')
   .get('/release/photonstorm/phaser.json')
diff --git a/services/github/github-repo-size.tester.js b/services/github/github-repo-size.tester.js
index 4f5d6411a73aab4fa84b301d2d418c49c08c2d47..0a0e209cb4cd080e9daf3f5cc971b8f9fbb1554a 100644
--- a/services/github/github-repo-size.tester.js
+++ b/services/github/github-repo-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('repository size')
   .get('/badges/shields.json')
diff --git a/services/github/github-search.tester.js b/services/github/github-search.tester.js
index e09dab7929462056c34ffdd23525dd2514355352..238b25d7fef345455796bd88392297684ff98c4a 100644
--- a/services/github/github-search.tester.js
+++ b/services/github/github-search.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('hit counter')
   .get('/badges/shields/async%20handle.json')
diff --git a/services/github/github-size.tester.js b/services/github/github-size.tester.js
index 2803f5633f3ba4346e62914cc1774adfa595c836..9899aeebcaea2db206fb54d5c2e77f2031c31e6a 100644
--- a/services/github/github-size.tester.js
+++ b/services/github/github-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('File size')
   .get('/webcaetano/craft/build/phaser-craft.min.js.json')
diff --git a/services/github/github-stars.tester.js b/services/github/github-stars.tester.js
index 5c2b58783f7a3331b7f5347bd29c1486a6df065a..6d501a65c41fd079df1e6a7f435dcb419696a843 100644
--- a/services/github/github-stars.tester.js
+++ b/services/github/github-stars.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Stars')
   .get('/badges/shields.json')
diff --git a/services/github/github-tag.tester.js b/services/github/github-tag.tester.js
index fb1b55eb964b3faa00288154bee8a983d425fd76..4a2bd9f5cb5bee3c9cc514769ee356f8f07a9ea9 100644
--- a/services/github/github-tag.tester.js
+++ b/services/github/github-tag.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Tag')
   .get('/tag/photonstorm/phaser.json')
diff --git a/services/github/github-watchers.tester.js b/services/github/github-watchers.tester.js
index 49e205b432d03f124cb36bd1fc00df14075815ad..3fae7e040afe4e19b4cfb612540c092ab5b8265d 100644
--- a/services/github/github-watchers.tester.js
+++ b/services/github/github-watchers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Watchers')
   .get('/badges/shields.json')
diff --git a/services/gitlab/gitlab-pipeline-status.service.js b/services/gitlab/gitlab-pipeline-status.service.js
index 5bf13ecff7d5b84d653249e529a63cb51476830e..b1686e75cc2fd63dcfca66d40aa65107656016f2 100644
--- a/services/gitlab/gitlab-pipeline-status.service.js
+++ b/services/gitlab/gitlab-pipeline-status.service.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { optionalUrl } = require('../validators')
-const { NotFound } = require('../errors')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService, NotFound } = require('..')
+const { optionalUrl } = require('../validators')
 
 const badgeSchema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/gitlab/gitlab-pipeline-status.tester.js b/services/gitlab/gitlab-pipeline-status.tester.js
index 01f0d0162eae5f5b2b8a5f589c36060e1662b767..b2eb24310d066eb7679143e4d540ca91ce5fba0b 100644
--- a/services/gitlab/gitlab-pipeline-status.tester.js
+++ b/services/gitlab/gitlab-pipeline-status.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Pipeline status')
   .get('/gitlab-org/gitlab-ce.json')
diff --git a/services/gitter/gitter.tester.js b/services/gitter/gitter.tester.js
index 07e6c5fa579e91ccdeed27590f3788f13eed2c93..f5e7ecebae7366232c8f4f76e784e57c4dd8f59d 100644
--- a/services/gitter/gitter.tester.js
+++ b/services/gitter/gitter.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('on gitter')
   .get('/nwjs/nw.js.json')
diff --git a/services/gratipay/gratipay.service.js b/services/gratipay/gratipay.service.js
index bcb9c2f5a2fe2d7b7060f88c7572ae70e9a6b227..d3bebd310b411c1ce9bcba0eba95c7da2894efd6 100644
--- a/services/gratipay/gratipay.service.js
+++ b/services/gratipay/gratipay.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'funding',
diff --git a/services/gratipay/gratipay.tester.js b/services/gratipay/gratipay.tester.js
index f88d590f9478e93688ffc5f88b5a4f3f564df08a..dbf2522d7ef82c663d3377db92e2fa8145328558 100644
--- a/services/gratipay/gratipay.tester.js
+++ b/services/gratipay/gratipay.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'gratipay',
diff --git a/services/hackage/hackage.tester.js b/services/hackage/hackage.tester.js
index 78de207168b4c9818c2452c758b2fb86e01555e2..a09ee66dca5315273f47f9f9b6b0d18cc8ec0789 100644
--- a/services/hackage/hackage.tester.js
+++ b/services/hackage/hackage.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/hexpm/hexpm.service.js b/services/hexpm/hexpm.service.js
index 4f25c3ecabcc61d4fdd1c075c886a5e759533802..80c94618aa452beb73e4c5e5b3c1851b367fafe4 100644
--- a/services/hexpm/hexpm.service.js
+++ b/services/hexpm/hexpm.service.js
@@ -1,16 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { metric, addv, maybePluralize } = require('../../lib/text-formatters')
 const {
-  metric,
-  addv: versionText,
-  maybePluralize,
-} = require('../../lib/text-formatters')
-const {
-  downloadCount: downloadCountColor,
+  downloadCount,
   version: versionColor,
 } = require('../../lib/color-formatters')
+const { BaseJsonService } = require('..')
 
 const hexSchema = Joi.object({
   downloads: Joi.object({
@@ -95,7 +91,7 @@ class HexPmLicense extends BaseHexPmService {
 
 class HexPmVersion extends BaseHexPmService {
   static render({ version }) {
-    return { message: versionText(version), color: versionColor(version) }
+    return { message: addv(version), color: versionColor(version) }
   }
 
   async handle({ packageName }) {
@@ -145,7 +141,7 @@ function DownloadsForInterval(interval) {
     static render({ downloads }) {
       return {
         message: `${metric(downloads)}${messageSuffix}`,
-        color: downloadCountColor(downloads),
+        color: downloadCount(downloads),
       }
     }
 
diff --git a/services/hexpm/hexpm.tester.js b/services/hexpm/hexpm.tester.js
index f4bd1731e8930e84a999c6490bd6bf9fbb49a569..8fd479f22ed3e99803529cf1d64a7f34a1963054 100644
--- a/services/hexpm/hexpm.tester.js
+++ b/services/hexpm/hexpm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const isHexpmVersion = Joi.string().regex(/^v\d+.\d+.?\d?$/)
diff --git a/services/homebrew/homebrew.tester.js b/services/homebrew/homebrew.tester.js
index 1df0e2e1df4838b92eac5dfee06aa83e738a3e56..87781afa61c2c8c502837d29d17258aa36fa39a3 100644
--- a/services/homebrew/homebrew.tester.js
+++ b/services/homebrew/homebrew.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/imagelayers/imagelayers.service.js b/services/imagelayers/imagelayers.service.js
index 9c2632d6d06a75f6ebf6677c060a1017329def96..1492831b6d4e8b10333c34916f7c60481f01474e 100644
--- a/services/imagelayers/imagelayers.service.js
+++ b/services/imagelayers/imagelayers.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // image layers integration - deprecated as of November 2018.
 module.exports = deprecatedService({
diff --git a/services/imagelayers/imagelayers.tester.js b/services/imagelayers/imagelayers.tester.js
index b30fd487dfdee26ffc1f352249d7c5690b80e1eb..51bf85fd5d386b1cd2237b9c7de0a445a0fba494 100644
--- a/services/imagelayers/imagelayers.tester.js
+++ b/services/imagelayers/imagelayers.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'imagelayers',
diff --git a/services/index.js b/services/index.js
index cdfa49b00879daf5673dca7c242e4b1fe23b2b2f..5081f0a5ed650dd66d503e38ce9a0ce563c798fb 100644
--- a/services/index.js
+++ b/services/index.js
@@ -1,10 +1,14 @@
 'use strict'
 
 const glob = require('glob')
-const BaseService = require('./base')
+const base = require('../core/base-service')
+const createServiceTester = require('./create-service-tester')
+const ServiceTester = require('./service-tester')
 const { categories } = require('./categories')
 const { assertValidServiceDefinitionExport } = require('./service-definitions')
 
+const { BaseService } = base
+
 class InvalidService extends Error {
   constructor(message) {
     super(message)
@@ -71,6 +75,9 @@ function loadTesters() {
 }
 
 module.exports = {
+  ...base,
+  createServiceTester,
+  ServiceTester,
   InvalidService,
   loadServiceClasses,
   loadTesters,
diff --git a/services/issuestats/issuestats.service.js b/services/issuestats/issuestats.service.js
index 15ce2523700fb14398906112fb69d2c8aa15610d..9e6c57938fe93d5864f7b7c5755a8fc728190a20 100644
--- a/services/issuestats/issuestats.service.js
+++ b/services/issuestats/issuestats.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'issue-tracking',
diff --git a/services/issuestats/issuestats.tester.js b/services/issuestats/issuestats.tester.js
index 4d34fb5565f0a2e39e0f5d8167e3f6c1a7fdfb62..8eb3f8cb7aee6fbdee0a3d114afbf72d0991814a 100644
--- a/services/issuestats/issuestats.tester.js
+++ b/services/issuestats/issuestats.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'issuestats', title: 'Issue Stats' })
 module.exports = t
diff --git a/services/itunes/itunes.service.js b/services/itunes/itunes.service.js
index b922c9159f4e83ab23262291683ec637e1c314c5..4ab5ff24e21f1cb3c442abb9453c950891c45503 100644
--- a/services/itunes/itunes.service.js
+++ b/services/itunes/itunes.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { renderVersionBadge } = require('../../lib/version')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schema = Joi.object({
diff --git a/services/itunes/itunes.tester.js b/services/itunes/itunes.tester.js
index 19696f0bc75cc43d2844ca5b9e36e4b190293a21..d5da284fae776edff413e6955644d82af8365396 100644
--- a/services/itunes/itunes.tester.js
+++ b/services/itunes/itunes.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('iTunes version (valid)')
   .get('/324684580.json')
diff --git a/services/jenkins/jenkins-coverage.service.js b/services/jenkins/jenkins-coverage.service.js
index e46c0358a71d786a785c1d31835b97d98c7744d4..6f0e023440da8c607efe92c75496dc3b70899ed2 100644
--- a/services/jenkins/jenkins-coverage.service.js
+++ b/services/jenkins/jenkins-coverage.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const serverSecrets = require('../../lib/server-secrets')
 
 const {
diff --git a/services/jenkins/jenkins-coverage.tester.js b/services/jenkins/jenkins-coverage.tester.js
index 16a78b6024f08fae693574a777f9edb68beab596..eb10f8c3fbdb214b6360f2ff915ce016d78e59a8 100644
--- a/services/jenkins/jenkins-coverage.tester.js
+++ b/services/jenkins/jenkins-coverage.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
-const ServiceTester = require('../service-tester')
 
 const t = new ServiceTester({
   id: 'jenkins-coverage',
diff --git a/services/jenkins/jenkins-plugin-installs.service.js b/services/jenkins/jenkins-plugin-installs.service.js
index ccf6137bfb869531449ed14de1b59cfa25005db5..4f29a0d23a92aedfc4c238576e6de0f86a7e25c1 100644
--- a/services/jenkins/jenkins-plugin-installs.service.js
+++ b/services/jenkins/jenkins-plugin-installs.service.js
@@ -2,12 +2,11 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
 const {
   downloadCount: downloadCountColor,
 } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const schemaInstallations = Joi.object()
diff --git a/services/jenkins/jenkins-plugin-installs.tester.js b/services/jenkins/jenkins-plugin-installs.tester.js
index 96a8932e892b208e3551d4618db8858df8283c7e..bb62c497ea35f424a43bf0c5ce65c63acc7f462d 100644
--- a/services/jenkins/jenkins-plugin-installs.tester.js
+++ b/services/jenkins/jenkins-plugin-installs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // total installs
 
diff --git a/services/jenkins/jenkins-plugin-version.tester.js b/services/jenkins/jenkins-plugin-version.tester.js
index 0e84fdc6cc87cd2b7bc9ffc124a97e154a33b9f4..2534f5c6b0dce0b02682d4913ddc74d7581ab0e8 100644
--- a/services/jenkins/jenkins-plugin-version.tester.js
+++ b/services/jenkins/jenkins-plugin-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({
   id: 'jenkins-plugin',
diff --git a/services/jetbrains/jetbrains-base.js b/services/jetbrains/jetbrains-base.js
index 9f4871e474805e8b90e989ee0d469df3dc519f72..b80a46cb16735f29c44499c93453daaede2b6de8 100644
--- a/services/jetbrains/jetbrains-base.js
+++ b/services/jetbrains/jetbrains-base.js
@@ -1,7 +1,6 @@
 'use strict'
 
-const BaseXmlService = require('../base-xml')
-const { NotFound } = require('../errors')
+const { BaseXmlService, NotFound } = require('..')
 
 module.exports = class JetbrainsBase extends BaseXmlService {
   static buildUrl(base) {
diff --git a/services/jetbrains/jetbrains.tester.js b/services/jetbrains/jetbrains.tester.js
index 860b1b1f6d758b2f88e089a58453da3b0b989fc2..c7bb86316e8ef7f0735143f9a7279cf197899e1d 100644
--- a/services/jetbrains/jetbrains.tester.js
+++ b/services/jetbrains/jetbrains.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isVPlusDottedVersionNClauses } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'jetbrains', title: 'JetBrains' })
diff --git a/services/jira/jira-base.js b/services/jira/jira-base.js
index bcf2410e4d819177255be30f692bb870571a8f48..e22d813b33fdf3ee610ce237647819cb0160eed5 100644
--- a/services/jira/jira-base.js
+++ b/services/jira/jira-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const serverSecrets = require('../../lib/server-secrets')
 
 module.exports = class JiraBase extends BaseJsonService {
diff --git a/services/jira/jira-issue.tester.js b/services/jira/jira-issue.tester.js
index 8d5b920c7dd8d00a3860536caddbaa0a12e350c2..b8fb77f058541838a8afb857dd184ca3db44cbe2 100644
--- a/services/jira/jira-issue.tester.js
+++ b/services/jira/jira-issue.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
 t.create('live: unknown issue')
diff --git a/services/jira/jira-sprint.tester.js b/services/jira/jira-sprint.tester.js
index 58de592df4a1ef270dd6ff78c6436f03ab1f0be8..595d51b937c96f4032fdaa78c32a2754dd251753 100644
--- a/services/jira/jira-sprint.tester.js
+++ b/services/jira/jira-sprint.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isIntegerPercentage } = require('../test-validators')
 const { mockJiraCreds, restore, user, pass } = require('./jira-test-helpers')
 
diff --git a/services/jitpack/jitpack.tester.js b/services/jitpack/jitpack.tester.js
index c0a58dbece6534efff70b50dd39c47883ba3da11..cbca26fde18920fab545d01ba284e2939269ef32 100644
--- a/services/jitpack/jitpack.tester.js
+++ b/services/jitpack/jitpack.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 // Github allows versions with chars, etc.
 const isAnyV = Joi.string().regex(/^v.+$/)
diff --git a/services/leanpub/leanpub-book-summary.service.js b/services/leanpub/leanpub-book-summary.service.js
index a7e97113ff863a5da4b216bea90eee489d2adc17..0aafddb0f3ac4c2ff4569cfb1d4e37538e1ce1f1 100644
--- a/services/leanpub/leanpub-book-summary.service.js
+++ b/services/leanpub/leanpub-book-summary.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const bookSummarySchema = Joi.object({
   id: Joi.number().required(),
diff --git a/services/leanpub/leanpub-book-summary.tester.js b/services/leanpub/leanpub-book-summary.tester.js
index 797edc468cc4aab7f769a90679d3c85fab9a108a..a712a54891b6446f40ccf9b1ea14566e9e7af6ca 100644
--- a/services/leanpub/leanpub-book-summary.tester.js
+++ b/services/leanpub/leanpub-book-summary.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 
 const knownValidBook = 'juice-shop'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('known book pages')
   .get(`/pages/${knownValidBook}.json`)
diff --git a/services/lgtm/lgtm.tester.js b/services/lgtm/lgtm.tester.js
index 7e5bbb134d4d29a049d0b59b74e722a060e5d0e3..c8c242e4acbd17efe7d139a4a624a1abe166dae8 100644
--- a/services/lgtm/lgtm.tester.js
+++ b/services/lgtm/lgtm.tester.js
@@ -1,10 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
-const t = new ServiceTester({ id: 'lgtm', title: 'LGTM' })
-module.exports = t
+
+const t = (module.exports = new ServiceTester({ id: 'lgtm', title: 'LGTM' }))
 
 // Alerts Badge
 
diff --git a/services/liberapay/liberapay.tester.js b/services/liberapay/liberapay.tester.js
index 8bbf7beddc55c33fb2a32c445841cdadacd45551..4249c8f35883bec06ebb5154377f6a338d0c2010 100644
--- a/services/liberapay/liberapay.tester.js
+++ b/services/liberapay/liberapay.tester.js
@@ -1,13 +1,18 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
+const { isMetric } = require('../test-validators')
+
+// Values must be greater than zero.
 const isLiberapayTestValues = Joi.string().regex(
   /^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)[ A-Za-z]{4}\/week/
-) //values must be greater than zero
-const { isMetric } = require('../test-validators')
-const t = new ServiceTester({ id: 'liberapay', title: 'Liberapay' })
-module.exports = t
+)
+
+const t = (module.exports = new ServiceTester({
+  id: 'liberapay',
+  title: 'Liberapay',
+}))
 
 t.create('Receiving')
   .get('/receives/Liberapay.json')
diff --git a/services/librariesio/librariesio-base.js b/services/librariesio/librariesio-base.js
index f26d138637b17a765fb00eabe47bcc2816f9abdd..cd7b4b4dee67f225a01409d1c6697c03901deff1 100644
--- a/services/librariesio/librariesio-base.js
+++ b/services/librariesio/librariesio-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidResponse } = require('..')
 const { nonNegativeInteger, anyInteger } = require('../validators')
 
 // API doc: https://libraries.io/api#project
diff --git a/services/librariesio/librariesio-dependencies.tester.js b/services/librariesio/librariesio-dependencies.tester.js
index a78eb2e68ad5470bbcc2f581ae5f8142985a97c1..ffef6867c4006b64b33f90ae557914dc03882796 100644
--- a/services/librariesio/librariesio-dependencies.tester.js
+++ b/services/librariesio/librariesio-dependencies.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isDependencyState } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependencies for releases')
   .get('/release/hex/phoenix/1.0.3.json')
diff --git a/services/librariesio/librariesio-dependent-repos.tester.js b/services/librariesio/librariesio-dependent-repos.tester.js
index 00418f175e64f0cbff973f6c4dcf72cadfe835ae..bf6f849775e1a05f8ece747393043ca3c6de5250 100644
--- a/services/librariesio/librariesio-dependent-repos.tester.js
+++ b/services/librariesio/librariesio-dependent-repos.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependent repo count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-dependents.tester.js b/services/librariesio/librariesio-dependents.tester.js
index 87c16aa028ae5208883623bc995a4a9ab2ad676f..dd2ec520d98653cc449fa4b838ef07f2282c5398 100644
--- a/services/librariesio/librariesio-dependents.tester.js
+++ b/services/librariesio/librariesio-dependents.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('dependent count')
   .get('/npm/got.json')
diff --git a/services/librariesio/librariesio-sourcerank.tester.js b/services/librariesio/librariesio-sourcerank.tester.js
index 822636db4b5929b89b6b2a8448e843936e4e2450..80c8864f2068243d3b291258f029769dc8c508e5 100644
--- a/services/librariesio/librariesio-sourcerank.tester.js
+++ b/services/librariesio/librariesio-sourcerank.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { anyInteger } = require('../validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('sourcerank')
   .get('/npm/got.json')
diff --git a/services/libscore/libscore.service.js b/services/libscore/libscore.service.js
index ea95977d158fcaf398f721dce1bfff9a800eca4e..26e5d1aa8fffea080102481ff7bbc40cad1fcf9c 100644
--- a/services/libscore/libscore.service.js
+++ b/services/libscore/libscore.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'rating',
diff --git a/services/libscore/libscore.tester.js b/services/libscore/libscore.tester.js
index 1c77fe60529d8b783f921f6dd66532c2b7f743f6..8c440914e0141796c41b6b1c75a1150ae59961d2 100644
--- a/services/libscore/libscore.tester.js
+++ b/services/libscore/libscore.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'libscore', title: 'libscore' })
 module.exports = t
diff --git a/services/luarocks/luarocks.tester.js b/services/luarocks/luarocks.tester.js
index 19907808c5a7fd475af4a4265eac1674acbe03c1..94ce1874e4fda0eabf24db4e06d1ac7c52e36fe6 100644
--- a/services/luarocks/luarocks.tester.js
+++ b/services/luarocks/luarocks.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'luarocks', title: 'LuaRocks' })
 module.exports = t
diff --git a/services/magnumci/magnumci.service.js b/services/magnumci/magnumci.service.js
index d3f0ea84a99b0fca55ac68a9ff4bdf0e0c9f2688..bee5dd6b30b554868e529c5c24d733a7a4a0858f 100644
--- a/services/magnumci/magnumci.service.js
+++ b/services/magnumci/magnumci.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // Magnum CI integration - deprecated as of July 2018
 module.exports = deprecatedService({
diff --git a/services/magnumci/magnumci.tester.js b/services/magnumci/magnumci.tester.js
index 3b75f3e203c1d94794da40a60558722b1419a77a..bd44cf89f23b7dd4817653e140523af37f1f8eb2 100644
--- a/services/magnumci/magnumci.tester.js
+++ b/services/magnumci/magnumci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'magnumci', title: 'Magnum CI' })
 module.exports = t
diff --git a/services/maintenance/maintenance.tester.js b/services/maintenance/maintenance.tester.js
index ce1c9811512e8ac7d91ff06f44c5807d16651246..d10bed8df389318c88b14d481ebc9e309f495493 100644
--- a/services/maintenance/maintenance.tester.js
+++ b/services/maintenance/maintenance.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'maintenance', title: 'Maintenance' })
 module.exports = t
diff --git a/services/matrix/matrix.service.js b/services/matrix/matrix.service.js
index c86d3d0f64caa9cf4b8e13f8415700464e409393..17b10bf75c60ad725943a8c772c323212dbd4411 100644
--- a/services/matrix/matrix.service.js
+++ b/services/matrix/matrix.service.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const errors = require('../errors')
+const { BaseJsonService, InvalidParameter } = require('..')
 
 const queryParamSchema = Joi.object({
   server_fqdn: Joi.string().hostname(),
@@ -127,7 +126,7 @@ module.exports = class Matrix extends BaseJsonService {
           host = `${splitAlias[1]}:${splitAlias[2]}`
           break
         default:
-          throw new errors.InvalidParameter({ prettyMessage: 'invalid alias' })
+          throw new InvalidParameter({ prettyMessage: 'invalid alias' })
       }
     } else {
       host = serverFQDN
diff --git a/services/matrix/matrix.tester.js b/services/matrix/matrix.tester.js
index d2722fd56c48b78e6a717d8321f80bb24e365e83..9f5fb54c1b01b645b055763e99eb2d183cac7a5e 100644
--- a/services/matrix/matrix.tester.js
+++ b/services/matrix/matrix.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('get room state as guest')
   .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
diff --git a/services/maven-central/maven-central.tester.js b/services/maven-central/maven-central.tester.js
index 2125abfe5f5de637ddfbabb6debb128038ac43ae..7f089c7c4889a757f391dcea7620c200b213bb13 100644
--- a/services/maven-central/maven-central.tester.js
+++ b/services/maven-central/maven-central.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'maven-central', title: 'Maven Central' })
 module.exports = t
diff --git a/services/maven-metadata/maven-metadata.tester.js b/services/maven-metadata/maven-metadata.tester.js
index 0ca9405191698f883c3f4047b72aee9bd227ecdb..b4e2b4aa645892ea9b19c5cac80c40833eddb21d 100644
--- a/services/maven-metadata/maven-metadata.tester.js
+++ b/services/maven-metadata/maven-metadata.tester.js
@@ -1,14 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'maven-metadata',
   title: 'maven-metadata badge',
-})
-module.exports = t
+}))
 
 t.create('valid maven-metadata.xml uri')
   .get(
diff --git a/services/microbadger/microbadger.tester.js b/services/microbadger/microbadger.tester.js
index e026407aa579d7e8224e47cf40ce74533eb14e82..242135572c913da7b774c74b437f1d5112f5eaea 100644
--- a/services/microbadger/microbadger.tester.js
+++ b/services/microbadger/microbadger.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isFileSize } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
diff --git a/services/myget/myget.tester.js b/services/myget/myget.tester.js
index 4f314b34d5d3c2aa5ab13b77bfc662c9a88d0cfc..87606a76027acb90e09e9855140e236000e09e10 100644
--- a/services/myget/myget.tester.js
+++ b/services/myget/myget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClausesWithOptionalSuffix,
@@ -14,8 +14,11 @@ const {
 } = require('../nuget-fixtures')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'myget', title: 'MyGet', pathPrefix: '' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'myget',
+  title: 'MyGet',
+  pathPrefix: '',
+}))
 
 // downloads
 
@@ -63,22 +66,6 @@ t.create('total downloads (unexpected first response)')
     value: 'unparseable intermediate json response',
   })
 
-t.create('total downloads (unexpected second response)')
-  .get('/myget/mongodb/dt/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'downloads', value: 'unparseable json response' })
-
 // version
 
 t.create('version (valid)')
@@ -163,22 +150,6 @@ t.create('version (not found)')
   .get('/myget/foo/v/not-a-real-package.json')
   .expectJSON({ name: 'myget', value: 'package not found' })
 
-t.create('version (unexpected second response)')
-  .get('/myget/mongodb/v/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'myget', value: 'unparseable json response' })
-
 // version (pre)
 
 t.create('version (pre) (valid)')
@@ -253,19 +224,3 @@ t.create('version (pre) (mocked, blue badge)')
 t.create('version (pre) (not found)')
   .get('/myget/foo/vpre/not-a-real-package.json')
   .expectJSON({ name: 'myget', value: 'package not found' })
-
-t.create('version (pre) (unexpected second response)')
-  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json')
-  .intercept(nock =>
-    nock('https://www.myget.org')
-      .get('/F/mongodb/api/v3/index.json')
-      .reply(200, queryIndex)
-  )
-  .intercept(nock =>
-    nock('https://api-v2v3search-0.nuget.org')
-      .get(
-        '/query?q=packageid%3Amongodb.driver.core&prerelease=true&semVerLevel=2'
-      )
-      .reply(invalidJSON)
-  )
-  .expectJSON({ name: 'myget', value: 'unparseable json response' })
diff --git a/services/nexus/nexus.service.js b/services/nexus/nexus.service.js
index 191be75790bf00a44f51a7057338fad859639e18..c3e769b12e0068072f288b3211e8c0c823bd1337 100644
--- a/services/nexus/nexus.service.js
+++ b/services/nexus/nexus.service.js
@@ -2,15 +2,14 @@
 
 const Joi = require('joi')
 
-const BaseJsonService = require('../base-json')
-const { InvalidResponse, NotFound } = require('../errors')
-const { isSnapshotVersion } = require('./nexus-version')
 const { version: versionColor } = require('../../lib/color-formatters')
 const { addv } = require('../../lib/text-formatters')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService, InvalidResponse, NotFound } = require('..')
 const {
   optionalDottedVersionNClausesWithOptionalSuffix,
 } = require('../validators')
+const { isSnapshotVersion } = require('./nexus-version')
 
 const searchApiSchema = Joi.object({
   data: Joi.array()
diff --git a/services/nexus/nexus.tester.js b/services/nexus/nexus.tester.js
index 8b6fbf8a2cd6861cddff218221267d8105cf31ca..efffb2849fca463e91c1f5301aa6854a8e845d87 100644
--- a/services/nexus/nexus.tester.js
+++ b/services/nexus/nexus.tester.js
@@ -5,7 +5,7 @@ const sinon = require('sinon')
 const {
   isVPlusDottedVersionNClausesWithOptionalSuffix: isVersion,
 } = require('../test-validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const serverSecrets = require('../../lib/server-secrets')
 
 const user = 'admin'
diff --git a/services/node/node.tester.js b/services/node/node.tester.js
index 78c3a4ece3f16dd55fec3c34a50e1f2c28090fc7..f9baa4ff8e5a41b181984f8d41a45532844f9b7e 100644
--- a/services/node/node.tester.js
+++ b/services/node/node.tester.js
@@ -4,7 +4,7 @@ const { expect } = require('chai')
 const Joi = require('joi')
 const { Range } = require('semver')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 function expectSemverRange(value) {
   expect(() => new Range(value)).not.to.throw()
diff --git a/services/npm/npm-base.js b/services/npm/npm-base.js
index 2d7d239fe9f3d7de8d1eb9fb5eb9a21d1e5fbaf9..a6553a143fd67c87fdd3e90986eaeee37612d59e 100644
--- a/services/npm/npm-base.js
+++ b/services/npm/npm-base.js
@@ -2,8 +2,7 @@
 
 const Joi = require('joi')
 const serverSecrets = require('../../lib/server-secrets')
-const BaseJsonService = require('../base-json')
-const { InvalidResponse, NotFound } = require('../errors')
+const { BaseJsonService, InvalidResponse, NotFound } = require('..')
 const { isDependencyMap } = require('../package-json-helpers')
 
 const deprecatedLicenseObjectSchema = Joi.object({
diff --git a/services/npm/npm-collaborators.tester.js b/services/npm/npm-collaborators.tester.js
index 4b8343fc605af27e79dad156d14f6b2ae5fe24c8..f005d87ce5185f4a68423d1700decd76fe0f5829 100644
--- a/services/npm/npm-collaborators.tester.js
+++ b/services/npm/npm-collaborators.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the contributor count')
   .get('/prettier.json')
diff --git a/services/npm/npm-dependency-version.tester.js b/services/npm/npm-dependency-version.tester.js
index 5a998e8a25bb43af2b9d6c8df64c4bd9fb785ae6..9fe860b1cdc6db3ea59117da37c1a502d1c13921 100644
--- a/services/npm/npm-dependency-version.tester.js
+++ b/services/npm/npm-dependency-version.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { semverRange } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the peer dependency version')
   .get('/react-boxplot/peer/react.json')
diff --git a/services/npm/npm-downloads.service.js b/services/npm/npm-downloads.service.js
index 16a3c308961d55c53e3accb28861c4fc544485c9..ef9b525b2f7464369b5e472bb229c77aa747cedd 100644
--- a/services/npm/npm-downloads.service.js
+++ b/services/npm/npm-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 // https://github.com/npm/registry/blob/master/docs/download-counts.md#output
diff --git a/services/npm/npm-downloads.tester.js b/services/npm/npm-downloads.tester.js
index ff499a871b81263a29eb3a19c1e25e8f149361d8..29a2d449ead8080923519b5b643f3b94567a55dd 100644
--- a/services/npm/npm-downloads.tester.js
+++ b/services/npm/npm-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric } = require('../test-validators')
 
 const t = new ServiceTester({
diff --git a/services/npm/npm-license.tester.js b/services/npm/npm-license.tester.js
index e10b75c9fe2a3f8e2b0b9a5684440c88bab0be24..cc6f1e86723e6019d9296c6ec747bced5d3bc167 100644
--- a/services/npm/npm-license.tester.js
+++ b/services/npm/npm-license.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the license of express')
   .get('/express.json')
diff --git a/services/npm/npm-type-definitions.tester.js b/services/npm/npm-type-definitions.tester.js
index 5a3350944ef4a488cfa78a71e5eb9845e4a34272..47e39e25a8619d12b09a886f1b43d2834c13f8a5 100644
--- a/services/npm/npm-type-definitions.tester.js
+++ b/services/npm/npm-type-definitions.tester.js
@@ -6,7 +6,7 @@ const isTypeDefinition = Joi.string().regex(
   /^((Flow|TypeScript)|(Flow \| TypeScript))$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('types (from dev dependencies + files)')
   .get('/chalk.json')
diff --git a/services/npm/npm-version.service.js b/services/npm/npm-version.service.js
index 79fbaec21cf797b814c37ea9772e446833ddbc19..a2211826eb605b5d9506f4c40aef261b5e1e8a3e 100644
--- a/services/npm/npm-version.service.js
+++ b/services/npm/npm-version.service.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const NpmBase = require('./npm-base')
 
 const keywords = ['node']
diff --git a/services/npm/npm-version.tester.js b/services/npm/npm-version.tester.js
index 87e97cb438a6067aa4ad56604c610b79591ffe83..f87f41f9bc74b7f7d0dfc25b1275c6dcc9c51ba2 100644
--- a/services/npm/npm-version.tester.js
+++ b/services/npm/npm-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isSemver } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('gets the package version of left-pad')
   .get('/left-pad.json')
diff --git a/services/nsp/nsp.service.js b/services/nsp/nsp.service.js
index 9b488c7a8913f8188cf125f230a21d6c6ff32474..703b15e9c2b37195650dcf6fb2743af04c26d963 100644
--- a/services/nsp/nsp.service.js
+++ b/services/nsp/nsp.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // nsp integration - deprecated as of December 2018.
 module.exports = deprecatedService({
diff --git a/services/nsp/nsp.tester.js b/services/nsp/nsp.tester.js
index 9e21341e8e49e93c47cbaa079b8b461e1ee39a2f..5e6c38d40c952512cfb0edfb7e903d21bbfae29b 100644
--- a/services/nsp/nsp.tester.js
+++ b/services/nsp/nsp.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'nsp',
diff --git a/services/nuget/nuget-v2-service-family.js b/services/nuget/nuget-v2-service-family.js
index 373d218c2f377b1e74232ab01e00636200311696..523837e0aff81acc8fdfd67c1e4008bb447bf64e 100644
--- a/services/nuget/nuget-v2-service-family.js
+++ b/services/nuget/nuget-v2-service-family.js
@@ -1,9 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 const { renderVersionBadge, renderDownloadBadge } = require('./nuget-helpers')
 
diff --git a/services/nuget/nuget-v3-service-family.js b/services/nuget/nuget-v3-service-family.js
index 7b8240c1954df5581effde97bce415526c871d6b..662566ae23aca3b33fe42446ebdefddbc5e99e36 100644
--- a/services/nuget/nuget-v3-service-family.js
+++ b/services/nuget/nuget-v3-service-family.js
@@ -4,8 +4,7 @@ const { promisify } = require('util')
 const Joi = require('joi')
 const { regularUpdate } = require('../../lib/regular-update')
 const RouteBuilder = require('../route-builder')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { renderVersionBadge, renderDownloadBadge } = require('./nuget-helpers')
 
 /*
diff --git a/services/nuget/nuget.tester.js b/services/nuget/nuget.tester.js
index f05f81c81e263bcaeab42f2f41872768f6a60b12..dc721a1c16eb4a2ed79ed5339da1fa6c0ae56be9 100644
--- a/services/nuget/nuget.tester.js
+++ b/services/nuget/nuget.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
@@ -15,8 +15,7 @@ const {
 } = require('../nuget-fixtures')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'nuget', title: 'NuGet' })
-module.exports = t
+const t = (module.exports = new ServiceTester({ id: 'nuget', title: 'NuGet' }))
 
 // downloads
 
diff --git a/services/opencollective/opencollective-all.tester.js b/services/opencollective/opencollective-all.tester.js
index a69d5b348e53f27a73ed4427c903a8de327aa25e..05282b0a7be854a2612a6dc8d6a059beff9e8378 100644
--- a/services/opencollective/opencollective-all.tester.js
+++ b/services/opencollective/opencollective-all.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-backers.tester.js b/services/opencollective/opencollective-backers.tester.js
index 24e5be5fce152cc42a0517465d0bf321be8f922b..541a595fd7d994325e580ddbba80b050eafd3e7a 100644
--- a/services/opencollective/opencollective-backers.tester.js
+++ b/services/opencollective/opencollective-backers.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json?style=_shields_test')
diff --git a/services/opencollective/opencollective-base.js b/services/opencollective/opencollective-base.js
index ac54277924dda74d4b30446c4587f2532b34147c..41ba077f4e29f412880c49c09a1b00ba0343a8ec 100644
--- a/services/opencollective/opencollective-base.js
+++ b/services/opencollective/opencollective-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 // https://developer.opencollective.com/#/api/collectives?id=get-info
diff --git a/services/opencollective/opencollective-by-tier.tester.js b/services/opencollective/opencollective-by-tier.tester.js
index 28f962d6fc014fd9f6a7fbef13b1901eeab12cab..df7ae78a7d50b944fa2bd87fd6705ac4f5057c06 100644
--- a/services/opencollective/opencollective-by-tier.tester.js
+++ b/services/opencollective/opencollective-by-tier.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields/2988.json')
diff --git a/services/opencollective/opencollective-sponsors.tester.js b/services/opencollective/opencollective-sponsors.tester.js
index 5087ad5ceeb9af379d0995d9344f69bf246ce632..9d8ef2063d8cac04dc21868eb5e031e467be5c2e 100644
--- a/services/opencollective/opencollective-sponsors.tester.js
+++ b/services/opencollective/opencollective-sponsors.tester.js
@@ -2,7 +2,7 @@
 
 const Joi = require('joi')
 const { nonNegativeInteger } = require('../validators')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('renders correctly')
   .get('/shields.json')
diff --git a/services/osslifecycle/osslifecycle.service.js b/services/osslifecycle/osslifecycle.service.js
index fcc11807e848463683f7b777051587605e020765..ef871be3c54fd2d70ee441ec4a86f57d286ebbe4 100644
--- a/services/osslifecycle/osslifecycle.service.js
+++ b/services/osslifecycle/osslifecycle.service.js
@@ -1,7 +1,6 @@
 'use strict'
 
-const BaseService = require('../base')
-const { InvalidResponse } = require('../errors')
+const { BaseService, InvalidResponse } = require('..')
 
 module.exports = class OssTracker extends BaseService {
   static get category() {
diff --git a/services/osslifecycle/osslifecycle.tester.js b/services/osslifecycle/osslifecycle.tester.js
index 716e8e9e1afaddb6dc39081049ffc74903415442..dfd730a541505ce783d2e5274b2a55580e9ed50f 100644
--- a/services/osslifecycle/osslifecycle.tester.js
+++ b/services/osslifecycle/osslifecycle.tester.js
@@ -1,8 +1,11 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
-const t = new ServiceTester({ id: 'osslifecycle', title: 'OSS Lifecycle' })
-module.exports = t
+const { ServiceTester } = require('..')
+
+const t = (module.exports = new ServiceTester({
+  id: 'osslifecycle',
+  title: 'OSS Lifecycle',
+}))
 
 t.create('osslifecycle status')
   .get('/Netflix/osstracker.json')
diff --git a/services/packagecontrol/packagecontrol.tester.js b/services/packagecontrol/packagecontrol.tester.js
index acd3d7ed9f6691d48d4847058ee1c5ef017a5c79..0701e4a6fe1a68aceb50a233052ed357644b8d24 100644
--- a/services/packagecontrol/packagecontrol.tester.js
+++ b/services/packagecontrol/packagecontrol.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'packagecontrol', title: 'Package Control' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'packagecontrol',
+  title: 'Package Control',
+}))
 
 t.create('monthly downloads')
   .get('/dm/GitGutter.json')
diff --git a/services/packagist/packagist.tester.js b/services/packagist/packagist.tester.js
index 415ab1d7ab3a856c1bed1c89e38a975463865530..ce2aa3f2d2092d46a51b060f421cb30c378be4bf 100644
--- a/services/packagist/packagist.tester.js
+++ b/services/packagist/packagist.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isComposerVersion,
   isMetric,
@@ -17,11 +17,10 @@ const {
 */
 const isPackagistVersion = Joi.string().regex(/^v?[0-9]+.[0-9]+.[0-9]+[\S]*$/)
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'packagist',
   title: 'PHP version from Packagist',
-})
-module.exports = t
+}))
 
 // tests for php version support endpoint
 
diff --git a/services/php-eye/php-eye-hhvm.tester.js b/services/php-eye/php-eye-hhvm.tester.js
index c94d38e366dd699b2ed87c7b48eddb951694fa55..df8cdfe156215bfc92a98f9a1eeeb4c533b25937 100644
--- a/services/php-eye/php-eye-hhvm.tester.js
+++ b/services/php-eye/php-eye-hhvm.tester.js
@@ -1,16 +1,17 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({ id: 'hhvm', title: 'hhvm status' })
-
 const isAllowedStatus = Joi.string().regex(
   /^(tested|partially tested|not tested|maybe untested)$/
 )
 
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'hhvm',
+  title: 'hhvm status',
+}))
 
 t.create('get default branch')
   .get('/symfony/symfony.json')
diff --git a/services/php-eye/php-eye-php-version.tester.js b/services/php-eye/php-eye-php-version.tester.js
index 29befab9b994b1b8dbfcd496e25284c830586a3b..fbe25a6a280e00b1a0a86cbe5b8e461544d3f944 100644
--- a/services/php-eye/php-eye-php-version.tester.js
+++ b/services/php-eye/php-eye-php-version.tester.js
@@ -1,14 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isPhpVersionReduction } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'php-eye',
   title: 'PHP version from PHP-Eye',
-})
-module.exports = t
+}))
 
 t.create('gets the package version of symfony')
   .get('/symfony/symfony.json')
diff --git a/services/powershellgallery/powershellgallery.service.js b/services/powershellgallery/powershellgallery.service.js
index 43f5a310d77bc3d9f2d3250ffaabcf9e75638689..2b3ba59409854e8a88aa922a9b7de1b6dc56ce25 100644
--- a/services/powershellgallery/powershellgallery.service.js
+++ b/services/powershellgallery/powershellgallery.service.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseXmlService = require('../base-xml')
-const { NotFound } = require('../errors')
-const { nonNegativeInteger } = require('../validators')
 const { createFilter } = require('../nuget/nuget-v2-service-family')
 const {
   renderVersionBadge,
   renderDownloadBadge,
 } = require('../nuget/nuget-helpers')
+const { BaseXmlService, NotFound } = require('..')
+const { nonNegativeInteger } = require('../validators')
 
 const WINDOWS_TAG_NAME = 'windows'
 const MACOS_TAG_NAME = 'macos'
diff --git a/services/powershellgallery/powershellgallery.tester.js b/services/powershellgallery/powershellgallery.tester.js
index 3f813ef5688488dc62bd2117ad98fc0729c07175..57bca781167e69b431ede4f2adc6b0e4182695e5 100644
--- a/services/powershellgallery/powershellgallery.tester.js
+++ b/services/powershellgallery/powershellgallery.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/pub/pub.tester.js b/services/pub/pub.tester.js
index 94b3d23e22d38e32b5a3a7868120389d6eb2edc6..0d9deac3edb17dbc0920eaeb0be9b74decded3c4 100644
--- a/services/pub/pub.tester.js
+++ b/services/pub/pub.tester.js
@@ -1,11 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isVPlusTripleDottedVersion } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'pub', title: 'Pub' })
-module.exports = t
+const t = (module.exports = new ServiceTester({ id: 'pub', title: 'Pub' }))
 
 t.create('package version')
   .get('/v/box2d.json')
diff --git a/services/puppetforge/puppetforge-modules.tester.js b/services/puppetforge/puppetforge-modules.tester.js
index a78e39c6e4bee3019df195d06f3ef4b2aed476ca..14e70dcb7677ec4971001cd94617d7919bad840b 100644
--- a/services/puppetforge/puppetforge-modules.tester.js
+++ b/services/puppetforge/puppetforge-modules.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isSemver } = require('../test-validators')
 
 const t = (module.exports = new ServiceTester({
diff --git a/services/pypi/pypi-base.js b/services/pypi/pypi-base.js
index 51aafc79c634408e57becdc8c0bc49d71fd25a5e..4179f3eea13cb83c88e62263bb874e4c05dd95d2 100644
--- a/services/pypi/pypi-base.js
+++ b/services/pypi/pypi-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const schema = Joi.object({
   info: Joi.object({
diff --git a/services/pypi/pypi-downloads.service.js b/services/pypi/pypi-downloads.service.js
index 4267178a8502f07ba0450f1bb8460c8469cf7cd8..0bae85d40ba939aac951382a726e7c2bfb50c862 100644
--- a/services/pypi/pypi-downloads.service.js
+++ b/services/pypi/pypi-downloads.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const { downloadCount } = require('../../lib/color-formatters')
 const { metric } = require('../../lib/text-formatters')
+const { BaseJsonService } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const keywords = ['python']
diff --git a/services/pypi/pypi.tester.js b/services/pypi/pypi.tester.js
index ab204015eec61f460c9e607e1c1cb462e3127e1b..e99280389b73dfb0cd5823c082764bdd8b9ad263 100644
--- a/services/pypi/pypi.tester.js
+++ b/services/pypi/pypi.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetricOverTimePeriod, isSemver } = require('../test-validators')
 
 const isPsycopg2Version = Joi.string().regex(/^v([0-9][.]?)+$/)
diff --git a/services/readthedocs/readthedocs.service.js b/services/readthedocs/readthedocs.service.js
index 93391e1b853559e3555f3b83b795dd0938436096..1108b09a43c8b89b1dd61fb1dc47cf7846543165 100644
--- a/services/readthedocs/readthedocs.service.js
+++ b/services/readthedocs/readthedocs.service.js
@@ -1,12 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
-const { NotFound } = require('../errors')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService, NotFound } = require('..')
 
 const keywords = ['documentation']
 
diff --git a/services/readthedocs/readthedocs.tester.js b/services/readthedocs/readthedocs.tester.js
index 73e684b576757784006ed21bd002655c3aaa440b..5ecb2bb75d3d7c0b19ef09e9e0b461814991e992 100644
--- a/services/readthedocs/readthedocs.tester.js
+++ b/services/readthedocs/readthedocs.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status')
   .get('/pip.json')
diff --git a/services/redmine/redmine.service.js b/services/redmine/redmine.service.js
index 9104bbb3033c8a23bb8fdb9268ab10b5424b96b6..26a74a8c1ec17eb9d0c4c7b2cfaa4e8eaea0e2d1 100644
--- a/services/redmine/redmine.service.js
+++ b/services/redmine/redmine.service.js
@@ -4,7 +4,7 @@ const { starRating } = require('../../lib/text-formatters')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
 
 const Joi = require('joi')
-const BaseXmlService = require('../base-xml')
+const { BaseXmlService } = require('..')
 
 const schema = Joi.object({
   'redmine-plugin': Joi.object({
diff --git a/services/redmine/redmine.tester.js b/services/redmine/redmine.tester.js
index b06cd1460db532b9a0611a464013abb259178b80..aa6fb02c11ffa8fbedbdfe5005f9939745dfbeaa 100644
--- a/services/redmine/redmine.tester.js
+++ b/services/redmine/redmine.tester.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isStarRating } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'redmine', title: 'Redmine' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'redmine',
+  title: 'Redmine',
+}))
 
 t.create('plugin rating')
   .get('/plugin/rating/redmine_xlsx_format_issue_exporter.json')
diff --git a/services/requires/requires.service.js b/services/requires/requires.service.js
index 2983ac63ac2d6e7b6dc5dddcbbf74f1741461fa4..409307b67968b43f42bd5866b516fc8dc13b2a4e 100644
--- a/services/requires/requires.service.js
+++ b/services/requires/requires.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 const Joi = require('joi')
 
 const statusSchema = Joi.object({
diff --git a/services/requires/requires.tester.js b/services/requires/requires.tester.js
index 7493d1fec081c87eae5c4864a55f3807670976ec..34a6503643f545ee193cd6fe8a38d58468e144cd 100644
--- a/services/requires/requires.tester.js
+++ b/services/requires/requires.tester.js
@@ -6,7 +6,7 @@ const isRequireStatus = Joi.string().regex(
   /^(up to date|outdated|insecure|unknown)$/
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('requirements (valid, without branch)')
   .get('/github/celery/celery.json')
diff --git a/services/resharper/resharper.tester.js b/services/resharper/resharper.tester.js
index fcf311d66ef114ec9446a5150137d151ae6ddda6..35b10de1e06ceb0623d00948ff086f7c84fd9fdc 100644
--- a/services/resharper/resharper.tester.js
+++ b/services/resharper/resharper.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const {
   isMetric,
   isVPlusDottedVersionNClauses,
diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js
index eb9aa37ddf922b831b232a0fc09b9396040a3a6e..bc2708e912c5e444bcc4b790ec62cd89d9a0d1bd 100644
--- a/services/scrutinizer/scrutinizer.tester.js
+++ b/services/scrutinizer/scrutinizer.tester.js
@@ -1,12 +1,14 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-const { isIntegerPercentage } = require('../test-validators')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
+const { isIntegerPercentage } = require('../test-validators')
 
-const t = new ServiceTester({ id: 'scrutinizer', title: 'Scrutinizer' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'scrutinizer',
+  title: 'Scrutinizer',
+}))
 
 t.create('code quality')
   .get('/g/filp/whoops.json')
diff --git a/services/shippable/shippable.service.js b/services/shippable/shippable.service.js
index 12fc651c57955ff3d10adc2f2f563658173612c9..3296022f092fa9ab3a8a1b10e272f2c784e53c11 100644
--- a/services/shippable/shippable.service.js
+++ b/services/shippable/shippable.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
-const { NotFound } = require('../errors')
 const { renderBuildStatusBadge } = require('../../lib/build-status')
+const { BaseJsonService, NotFound } = require('..')
 
 // source: https://github.com/badges/shields/pull/1362#discussion_r161693830
 const statusCodes = {
diff --git a/services/shippable/shippable.tester.js b/services/shippable/shippable.tester.js
index 6a3355676fc5e0e56d4d422a5e3ca8ee2eb7b0c6..41387ee524239a8cdc1be7cc3cfa4c5412c36418 100644
--- a/services/shippable/shippable.tester.js
+++ b/services/shippable/shippable.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('build status (valid, without branch)')
   .get('/5444c5ecb904a4b21567b0ff.json')
diff --git a/services/snap-ci/snap-ci.service.js b/services/snap-ci/snap-ci.service.js
index 2988b3cbca274429eeb40636ab1ed4e741a0c69b..3c9ffc0d64493f6e3bdf4f463da238821d79b770 100644
--- a/services/snap-ci/snap-ci.service.js
+++ b/services/snap-ci/snap-ci.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 module.exports = deprecatedService({
   category: 'build',
diff --git a/services/snap-ci/snap-ci.tester.js b/services/snap-ci/snap-ci.tester.js
index 8c32e40758709ffa9277be1f924b8265eb3d81e8..1661142c4753856f60f3acf8d5f225bf139702d0 100644
--- a/services/snap-ci/snap-ci.tester.js
+++ b/services/snap-ci/snap-ci.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'snap-ci', title: 'Snap CI' })
 module.exports = t
diff --git a/services/snyk/snyk-vulnerability-base.js b/services/snyk/snyk-vulnerability-base.js
index 386c749d12793b1fc8107f6d5bf1eed308559f7a..c46ca9a9e04eda5452c3009f56f7cbcf72a25e93 100644
--- a/services/snyk/snyk-vulnerability-base.js
+++ b/services/snyk/snyk-vulnerability-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSvgScrapingService = require('../base-svg-scraping')
+const { BaseSvgScrapingService } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/snyk/snyk-vulnerability-github.tester.js b/services/snyk/snyk-vulnerability-github.tester.js
index 90e6e6092a5d2e504384c5ba11be5ec72554367d..7de1153274f5be6fb39a0754434420f355548cdc 100644
--- a/services/snyk/snyk-vulnerability-github.tester.js
+++ b/services/snyk/snyk-vulnerability-github.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/snyk/snyk-vulnerability-npm.service.js b/services/snyk/snyk-vulnerability-npm.service.js
index d3232173dd8e968733f3ece7983833178be13d3a..d899e3fc3e2ff89062d53fc5c4c1a882fae8592d 100644
--- a/services/snyk/snyk-vulnerability-npm.service.js
+++ b/services/snyk/snyk-vulnerability-npm.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
 const SynkVulnerabilityBase = require('./snyk-vulnerability-base')
 
 module.exports = class SnykVulnerabilityNpm extends SynkVulnerabilityBase {
diff --git a/services/snyk/snyk-vulnerability-npm.tester.js b/services/snyk/snyk-vulnerability-npm.tester.js
index d6aec83ce68350eb7996c821a5ba614f40f0e069..a76386403ddfdcf1059279c05bc725ba9a0e64be 100644
--- a/services/snyk/snyk-vulnerability-npm.tester.js
+++ b/services/snyk/snyk-vulnerability-npm.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const {
   twoVulnerabilitiesSvg,
   zeroVulnerabilitiesSvg,
diff --git a/services/sonarqube/sonarqube.tester.js b/services/sonarqube/sonarqube.tester.js
index 02f49977b619ce4eb6a6737d4ba2aa88044e2977..cdc5b1d778f591b8548bc4be7b2e1492b00953b7 100644
--- a/services/sonarqube/sonarqube.tester.js
+++ b/services/sonarqube/sonarqube.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isIntegerPercentage } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sonar', title: 'SonarQube' })
diff --git a/services/sourceforge/sourceforge.tester.js b/services/sourceforge/sourceforge.tester.js
index b07eced536f98da10033e155a163c4bf72b4d4f6..aae9ac2313347b8b292f779ed02f1e469d6f6227 100644
--- a/services/sourceforge/sourceforge.tester.js
+++ b/services/sourceforge/sourceforge.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'sourceforge', title: 'SourceForge' })
diff --git a/services/sourcegraph/sourcegraph.service.js b/services/sourcegraph/sourcegraph.service.js
index c17fec2984b90f65e1f792218f74e4caea33a122..fe50b36c2e0b85846d7f6945c9f15fe774adc691 100644
--- a/services/sourcegraph/sourcegraph.service.js
+++ b/services/sourcegraph/sourcegraph.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const projectsCountRegex = /^\s[0-9]*(\.[0-9]k)?\sprojects$/
 const schema = Joi.object({
diff --git a/services/sourcegraph/sourcegraph.tester.js b/services/sourcegraph/sourcegraph.tester.js
index 22807b00cd74b2c26e2ba08974ecbf6712158d88..8bfab1d01018337a0fc4a7964eda433e0b1da208 100644
--- a/services/sourcegraph/sourcegraph.tester.js
+++ b/services/sourcegraph/sourcegraph.tester.js
@@ -1,9 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
 const { withRegex } = require('../test-validators')
 
+const t = (module.exports = require('..').createServiceTester())
+
 // Matches API responses such as "0 projects", "1 projects", "182 projects", "14.0k projects".
 // There may be other cases not covered by this regex, but hopefully the tested projects won't vary much.
 const projectsCount = withRegex(/^[0-9]*(\.[0-9]k)?\sprojects$/)
diff --git a/services/spiget/spiget-base.js b/services/spiget/spiget-base.js
index be2885939a12c43febaceb8b270317d0dedc951d..a5e1adde22d022279ae81dae3b234c45fcd53dbe 100644
--- a/services/spiget/spiget-base.js
+++ b/services/spiget/spiget-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const resourceSchema = Joi.object({
   downloads: Joi.number().required(),
diff --git a/services/spiget/spiget-download-size.tester.js b/services/spiget/spiget-download-size.tester.js
index d40c256f7d91472b865240e888ca378268a2848e..66ff7353c4bb22e86a19d1e07fe7d2d2f3b55e02 100644
--- a/services/spiget/spiget-download-size.tester.js
+++ b/services/spiget/spiget-download-size.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isFileSize } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-downloads.service.js b/services/spiget/spiget-downloads.service.js
index 31580e6661f2c116503620d41a5f0562521373b7..910060139d811d3a2d6ad3e43c0d0388c2ab8ec5 100644
--- a/services/spiget/spiget-downloads.service.js
+++ b/services/spiget/spiget-downloads.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 const { metric } = require('../../lib/text-formatters')
 const { downloadCount } = require('../../lib/color-formatters')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetDownloads extends BaseSpigetService {
   static get route() {
diff --git a/services/spiget/spiget-downloads.tester.js b/services/spiget/spiget-downloads.tester.js
index 761da8c7e74b55e5234bce7a621c34d98b2a36c2..ebe106c8a5ea08f6a72b18d608ac23701206856b 100644
--- a/services/spiget/spiget-downloads.tester.js
+++ b/services/spiget/spiget-downloads.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('EssentialsX (id 9089)')
   .get('/9089.json')
diff --git a/services/spiget/spiget-latest-version.service.js b/services/spiget/spiget-latest-version.service.js
index 79a43b54263e9f103982bd0df352fc8cfab1fed6..329e38295227d6926b0bf3d51e62191cad23c3ae 100644
--- a/services/spiget/spiget-latest-version.service.js
+++ b/services/spiget/spiget-latest-version.service.js
@@ -1,10 +1,9 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
-
+const Joi = require('joi')
 const { renderVersionBadge } = require('../../lib/version')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
-const Joi = require('joi')
 const versionSchema = Joi.object({
   downloads: Joi.number().required(),
   name: Joi.string().required(),
diff --git a/services/spiget/spiget-latest-version.tester.js b/services/spiget/spiget-latest-version.tester.js
index f484295632749eb5845f3abfe27ea73f1e2585a3..4ef39c50c22677a3c1e04ee1d1e1f1df93459a4b 100644
--- a/services/spiget/spiget-latest-version.tester.js
+++ b/services/spiget/spiget-latest-version.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { withRegex } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 // Note that Spigot versions can be anything (including just a string), so we'll make sure it's not returning 'not found'
 
diff --git a/services/spiget/spiget-rating.service.js b/services/spiget/spiget-rating.service.js
index 625e5d010e4a2da87fc86dc592040a63bb166f2c..d2d5cde7508b945178b0fbd7961fd732fac332e8 100644
--- a/services/spiget/spiget-rating.service.js
+++ b/services/spiget/spiget-rating.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
-const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
-
 const { starRating, metric } = require('../../lib/text-formatters')
 const { floorCount } = require('../../lib/color-formatters')
+const { BaseSpigetService, documentation, keywords } = require('./spiget-base')
 
 module.exports = class SpigetRatings extends BaseSpigetService {
   static get route() {
diff --git a/services/spiget/spiget-rating.tester.js b/services/spiget/spiget-rating.tester.js
index 46263caa588f6ca012cd1dd730b4240e84af7e5e..3fb2a03b022b6e92d7beb12fbe59a53f0b580a01 100644
--- a/services/spiget/spiget-rating.tester.js
+++ b/services/spiget/spiget-rating.tester.js
@@ -1,10 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-
 const { isStarRating, withRegex } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Stars - EssentialsX (id 9089)')
   .get('/stars/9089.json')
diff --git a/services/spiget/spiget-tested-versions.tester.js b/services/spiget/spiget-tested-versions.tester.js
index 696bc2d53fc010963e82dde5265ea00d925140f6..75139b71576ec6b0649152e9b28ecaaf299feada 100644
--- a/services/spiget/spiget-tested-versions.tester.js
+++ b/services/spiget/spiget-tested-versions.tester.js
@@ -1,13 +1,12 @@
 'use strict'
 
 const Joi = require('joi')
-
-const t = (module.exports = require('../create-service-tester')())
-
 const { withRegex } = require('../test-validators')
 
 const multipleVersions = withRegex(/^([+]?\d*\.\d+)(-)([+]?\d*\.\d+)$/)
 
+const t = (module.exports = require('..').createServiceTester())
+
 t.create('EssentialsX - multiple versions supported - (id 9089)')
   .get('/9089.json')
   .expectJSONTypes(
diff --git a/services/stackexchange/stackexchange-monthlyquestions.service.js b/services/stackexchange/stackexchange-monthlyquestions.service.js
index 84fa9320693eecccb95c489eea23a7c5880b273e..2639319a02806cb1b47af219de5b4a38b5623d66 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.service.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const renderQuestionsBadge = require('./stackexchange-helpers')
 const moment = require('moment')
 const Joi = require('joi')
+const { BaseJsonService } = require('..')
+const renderQuestionsBadge = require('./stackexchange-helpers')
 
 const tagSchema = Joi.object({
   total: Joi.number()
diff --git a/services/stackexchange/stackexchange-monthlyquestions.tester.js b/services/stackexchange/stackexchange-monthlyquestions.tester.js
index ce201cbd505ab97a0de1bb4a925b7a8e038f1c68..37945453121514977db9068c08a50c7301649abe 100644
--- a/services/stackexchange/stackexchange-monthlyquestions.tester.js
+++ b/services/stackexchange/stackexchange-monthlyquestions.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetricOverTimePeriod } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Monthly Questions for StackOverflow Momentjs')
   .get('/stackoverflow/qm/momentjs.json')
diff --git a/services/stackexchange/stackexchange-reputation.service.js b/services/stackexchange/stackexchange-reputation.service.js
index c2584f135a908794d087f41af407564e04669534..c71a1efd2199d1bec2b5cf65355b5c64f7dae30a 100644
--- a/services/stackexchange/stackexchange-reputation.service.js
+++ b/services/stackexchange/stackexchange-reputation.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
 const { floorCount: floorCountColor } = require('../../lib/color-formatters')
-const Joi = require('joi')
+const { BaseJsonService } = require('..')
 
 const reputationSchema = Joi.object({
   items: Joi.array()
diff --git a/services/stackexchange/stackexchange-reputation.tester.js b/services/stackexchange/stackexchange-reputation.tester.js
index 2983c8510a77b613e456f66d2ada70f08045e1b6..07afd7fc5f6841ffcf5ca36a14136504ea4a9dfe 100644
--- a/services/stackexchange/stackexchange-reputation.tester.js
+++ b/services/stackexchange/stackexchange-reputation.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Invalid parameters')
   .get('/stackoverflow/r/invalidimage.json')
diff --git a/services/stackexchange/stackexchange-taginfo.service.js b/services/stackexchange/stackexchange-taginfo.service.js
index bab8e45121dbf44b192184e706860f38545dc762..6281b77966f64c4fca19f1a8c57722d636e51754 100644
--- a/services/stackexchange/stackexchange-taginfo.service.js
+++ b/services/stackexchange/stackexchange-taginfo.service.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const renderQuestionsBadge = require('./stackexchange-helpers')
 const Joi = require('joi')
+const { BaseJsonService } = require('..')
+const renderQuestionsBadge = require('./stackexchange-helpers')
 
 const tagSchema = Joi.object({
   items: Joi.array()
diff --git a/services/stackexchange/stackexchange-taginfo.tester.js b/services/stackexchange/stackexchange-taginfo.tester.js
index def7bc6127e331a05bb3fdd4ba1183163a901f8a..d3dbfc4198fdd7a92da15037c1adcbaa6d4362bf 100644
--- a/services/stackexchange/stackexchange-taginfo.tester.js
+++ b/services/stackexchange/stackexchange-taginfo.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isMetric } = require('../test-validators')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('JavaScript Questions')
   .get('/stackoverflow/t/javascript.json')
diff --git a/services/static-badge/static-badge.tester.js b/services/static-badge/static-badge.tester.js
index 0a79d71202bf443a6e7f954644d51dac1f56f6e2..91a87ae801bc78d166ba2587b10acadba99c3ab8 100644
--- a/services/static-badge/static-badge.tester.js
+++ b/services/static-badge/static-badge.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Shields colorscheme color')
   .get('/badge/label-message-blue.json?style=_shields_test')
diff --git a/services/steam/steam-base.js b/services/steam/steam-base.js
index 15835fb8ae280f15f1ab4532cf1f17b9f4f09742..ae210a16dbcae6aba7cc579abc0d3e1aafdd5028 100644
--- a/services/steam/steam-base.js
+++ b/services/steam/steam-base.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 /**
  * The steam api is based like /{interface}/{method}/v{version}/
diff --git a/services/steam/steam-workshop.service.js b/services/steam/steam-workshop.service.js
index 62adf8fdff18c8e6d0a69cd1ea42274be3338d70..21f94cf2a02aa329e8339e28dfce54b37d11dd1d 100644
--- a/services/steam/steam-workshop.service.js
+++ b/services/steam/steam-workshop.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseSteamAPI = require('./steam-base')
-const { NotFound } = require('../errors')
+const prettyBytes = require('pretty-bytes')
 const { metric, formatDate } = require('../../lib/text-formatters')
 const { age: ageColor, downloadCount } = require('../../lib/color-formatters')
-const prettyBytes = require('pretty-bytes')
+const { NotFound } = require('..')
+const BaseSteamAPI = require('./steam-base')
 
 const documentation = `
 <p>
diff --git a/services/steam/steam-workshop.tester.js b/services/steam/steam-workshop.tester.js
index 8393c278227afa865e43cfad99877ae710c224fd..081cf0ffc005e2eac9cd55690c9e7e4f30a1a5f3 100644
--- a/services/steam/steam-workshop.tester.js
+++ b/services/steam/steam-workshop.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { isMetric, isFileSize, isFormattedDate } = require('../test-validators')
 
 const t = new ServiceTester({ id: 'steam', title: 'Steam Workshop Tests' })
diff --git a/services/suggest/suggest.tester.js b/services/suggest/suggest.tester.js
index bece51b96219dd7574a72aa4c80e129076db4f43..2a4036b5c4159bd10be070b5bf798806aa6d7eb4 100644
--- a/services/suggest/suggest.tester.js
+++ b/services/suggest/suggest.tester.js
@@ -3,15 +3,14 @@
 // These tests are for the badge-suggestion endpoint in lib/suggest.js. This
 // endpoint is called from frontend/components/suggestion-and-search.js.
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'suggest',
   title: 'suggest',
   pathPrefix: '/$suggest',
-})
-module.exports = t
+}))
 
 t.create('issues, forks, stars and twitter')
   .get(`/v1?url=${encodeURIComponent('https://github.com/atom/atom')}`)
diff --git a/services/swagger/swagger.service.js b/services/swagger/swagger.service.js
index 0889023a988c1904fd01fbe22e78451344f76fd6..904ad537f40898e088399beb9fd91c0ff3e32608 100644
--- a/services/swagger/swagger.service.js
+++ b/services/swagger/swagger.service.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
+const { BaseJsonService } = require('..')
 
 const validatorSchema = Joi.object()
   .keys({
diff --git a/services/swagger/swagger.tester.js b/services/swagger/swagger.tester.js
index e2c500d273f302187516365eb76a95a9ae0c44b4..108ac6796cdfd04c49ede4a04f6c37be50904a7d 100644
--- a/services/swagger/swagger.tester.js
+++ b/services/swagger/swagger.tester.js
@@ -5,7 +5,7 @@ const apiURL = 'http://online.swagger.io'
 const apiGetURL = '/validator/debug'
 const apiGetQueryParams = { url: 'https://example.com/example.json' }
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Valid (mocked)')
   .get(getURL)
diff --git a/services/symfony/symfony-insight.service.js b/services/symfony/symfony-insight.service.js
index 15037c08b2174a7ab58d16668daf6dbf1351dae4..0ff0eb4aa048fd632ea1e8e89319970a335bac1b 100644
--- a/services/symfony/symfony-insight.service.js
+++ b/services/symfony/symfony-insight.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseXmlService = require('../base-xml')
 const serverSecrets = require('../../lib/server-secrets')
-const { Inaccessible } = require('../errors')
+const { BaseXmlService, Inaccessible } = require('..')
 
 const violationSchema = Joi.object({
   severity: Joi.equal('info', 'minor', 'major', 'critical').required(),
diff --git a/services/symfony/symfony-insight.tester.js b/services/symfony/symfony-insight.tester.js
index 0e1473ba46845fcba3e8e77becca43681db969c9..f37249d826d272454c1271187c21c5f2142f5d7b 100644
--- a/services/symfony/symfony-insight.tester.js
+++ b/services/symfony/symfony-insight.tester.js
@@ -1,9 +1,10 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
 const { withRegex } = require('../test-validators')
 
+const t = (module.exports = require('..').createServiceTester())
+
 const {
   runningMockResponse,
   platinumMockResponse,
diff --git a/services/teamcity/teamcity-base.js b/services/teamcity/teamcity-base.js
index be77e1823b6427ba5cc5472c926b18e08c52d9c0..9e3d5d8423ffa5f0d951ae866aa2260f3513b4f9 100644
--- a/services/teamcity/teamcity-base.js
+++ b/services/teamcity/teamcity-base.js
@@ -1,7 +1,7 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 module.exports = class TeamCityBase extends BaseJsonService {
   async fetch({
diff --git a/services/teamcity/teamcity-build.tester.js b/services/teamcity/teamcity-build.tester.js
index 29736e6a64ccd9db68bdfc5d3c8243f631f15d65..e118faba40db26210ced18ac79a31dc75d3da6c9 100644
--- a/services/teamcity/teamcity-build.tester.js
+++ b/services/teamcity/teamcity-build.tester.js
@@ -12,7 +12,7 @@ const {
 const buildStatusValues = Joi.equal('passing', 'failure', 'error').required()
 const buildStatusTextRegex = /^success|failure|error|tests( failed: \d+( \(\d+ new\))?)?(,)?( passed: \d+)?(,)?( ignored: \d+)?(,)?( muted: \d+)?$/
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: codebetter unknown build')
   .get('/codebetter/btabc.json')
diff --git a/services/teamcity/teamcity-coverage.service.js b/services/teamcity/teamcity-coverage.service.js
index 10caba2bf1db6921b6feeb86b599da6f5051edc4..d8d34c707f802c75fe788012b5c3e770d8f8ca9e 100644
--- a/services/teamcity/teamcity-coverage.service.js
+++ b/services/teamcity/teamcity-coverage.service.js
@@ -1,9 +1,9 @@
 'use strict'
 
 const Joi = require('joi')
-const { InvalidResponse } = require('../errors')
-const TeamCityBase = require('./teamcity-base')
 const { coveragePercentage } = require('../../lib/color-formatters')
+const { InvalidResponse } = require('..')
+const TeamCityBase = require('./teamcity-base')
 
 const buildStatisticsSchema = Joi.object({
   property: Joi.array()
diff --git a/services/teamcity/teamcity-coverage.tester.js b/services/teamcity/teamcity-coverage.tester.js
index 18354e83a3157a5dd3ae608d97aef18671e995a8..d100f87aef30e213e915cf83d90d872e68777d70 100644
--- a/services/teamcity/teamcity-coverage.tester.js
+++ b/services/teamcity/teamcity-coverage.tester.js
@@ -9,7 +9,7 @@ const {
   restore,
 } = require('./teamcity-test-helpers')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('live: valid buildId')
   .get('/bt428.json')
diff --git a/services/travis/travis-build.service.js b/services/travis/travis-build.service.js
index 9e640ab95215941716e49982c0f5ff2b5fdf70cb..943c6f5c12bb255fedae71cca2d33880d1f6cb35 100644
--- a/services/travis/travis-build.service.js
+++ b/services/travis/travis-build.service.js
@@ -1,12 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-
-const BaseSvgScrapingService = require('../base-svg-scraping')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseSvgScrapingService } = require('..')
 
 const schema = Joi.object({
   message: Joi.alternatives()
diff --git a/services/travis/travis-build.tester.js b/services/travis/travis-build.tester.js
index 85dd49fbaf751beddc0d8b4fdb090714af1b24cf..8641d3fd790beb8d2c2966515c1ecf12d444a1e5 100644
--- a/services/travis/travis-build.tester.js
+++ b/services/travis/travis-build.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isBuildStatus } = require('../../lib/build-status')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-build',
diff --git a/services/travis/travis-php-version.tester.js b/services/travis/travis-php-version.tester.js
index b6e52becfe4d5f0e8f789e5a9fdb45f9b215ca8f..8344765469a68a550681740bb40939898741f8c8 100644
--- a/services/travis/travis-php-version.tester.js
+++ b/services/travis/travis-php-version.tester.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
 const { isPhpVersionReduction } = require('../test-validators')
+const { ServiceTester } = require('..')
 
 const t = (module.exports = new ServiceTester({
   id: 'travis-php-version',
diff --git a/services/twitter/twitter.tester.js b/services/twitter/twitter.tester.js
index 9625aa9b6f12a1c9fa05885d339d7fa8b1647b58..d77933c1e3f0ba618a30b76b73d911accc33d870 100644
--- a/services/twitter/twitter.tester.js
+++ b/services/twitter/twitter.tester.js
@@ -1,12 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
 const { isMetric } = require('../test-validators')
+const { ServiceTester } = require('..')
 
-const t = new ServiceTester({ id: 'twitter', title: 'Twitter' })
-module.exports = t
+const t = (module.exports = new ServiceTester({
+  id: 'twitter',
+  title: 'Twitter',
+}))
 
 t.create('Followers')
   .get('/follow/shields_io.json')
diff --git a/services/uptimerobot/uptimerobot-base.js b/services/uptimerobot/uptimerobot-base.js
index 40dbd3e5ecf315f9ce7d4d4ffa1be3f462831e46..7920f9e22c0f542f27c3a50481603fdb070d8f3b 100644
--- a/services/uptimerobot/uptimerobot-base.js
+++ b/services/uptimerobot/uptimerobot-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { InvalidParameter, InvalidResponse } = require('../errors')
+const { BaseJsonService, InvalidParameter, InvalidResponse } = require('..')
 
 // https://uptimerobot.com/api
 // POST getMonitors
diff --git a/services/uptimerobot/uptimerobot-ratio.tester.js b/services/uptimerobot/uptimerobot-ratio.tester.js
index 0c2e68d7397e5f0e2989728b29bc0b5c038c22de..c0bf29c7c31f47111276e314105fe3cdea5c8d6e 100644
--- a/services/uptimerobot/uptimerobot-ratio.tester.js
+++ b/services/uptimerobot/uptimerobot-ratio.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const { isPercentage } = require('../test-validators')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Uptime Robot: Percentage (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/uptimerobot/uptimerobot-status.tester.js b/services/uptimerobot/uptimerobot-status.tester.js
index 8b39c755e62570b8d2db1fd1fe87d5af33872c42..0dc042c01455b2dc8976295cc2cab21d54e090ba 100644
--- a/services/uptimerobot/uptimerobot-status.tester.js
+++ b/services/uptimerobot/uptimerobot-status.tester.js
@@ -11,7 +11,7 @@ const isUptimeStatus = Joi.string().valid(
   'down'
 )
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Uptime Robot: Status (valid)')
   .get('/m778918918-3e92c097147760ee39d02d36.json')
diff --git a/services/vaadin-directory/vaadin-directory.tester.js b/services/vaadin-directory/vaadin-directory.tester.js
index 8603cf31b2156532848d57da341126de8443a073..1761e923b7f82b0bbb8a37a8a0f06598201780b1 100644
--- a/services/vaadin-directory/vaadin-directory.tester.js
+++ b/services/vaadin-directory/vaadin-directory.tester.js
@@ -1,20 +1,17 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
-// Get validate function from validator.js lib
 const {
   isSemver,
   isStarRating,
   isFormattedDate,
 } = require('../test-validators')
+const { ServiceTester } = require('..')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'vaadin-directory',
   title: 'vaadin directory',
-})
-module.exports = t
+}))
 
 t.create('stars of component displayed in star icons')
   .get('/star/vaadinvaadin-grid.json')
diff --git a/services/versioneye/versioneye.service.js b/services/versioneye/versioneye.service.js
index cc8656970d647f55ebf93be9de76b37f999f3bf1..7059ebeba076986ec16f1a71731465d49eecbfa7 100644
--- a/services/versioneye/versioneye.service.js
+++ b/services/versioneye/versioneye.service.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const deprecatedService = require('../deprecated-service')
+const { deprecatedService } = require('..')
 
 // VersionEye integration - deprecated as of August 2018.
 module.exports = deprecatedService({
diff --git a/services/versioneye/versioneye.tester.js b/services/versioneye/versioneye.tester.js
index b7a3f2d42c6cc15ee7070e9f5d61f5030b83af85..cf23e8e66ddf1ad6d5c6dc467e23a0d12a10f206 100644
--- a/services/versioneye/versioneye.tester.js
+++ b/services/versioneye/versioneye.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const t = new ServiceTester({ id: 'versioneye', title: 'VersionEye' })
 module.exports = t
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-base.js b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
index 327af7f5bf1be100f4d4e9b66ead6569bb266c7b..24b9c61f0f52aed2acc7188d01566d2cbf09a691 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-base.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
@@ -1,8 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 
 const extensionQuerySchema = Joi.object({
   results: Joi.array()
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
index b2f5590a47f6b30689f075ab3fec563bf64cab7e..f35f1c4b41c183623b79f673fa5eff608a201c2e 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { isMetric } = require('../test-validators')
 
 const mockResponse = {
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
index 4e7f87d8fe60f2e768245d49af198afaf2607ee7..b33639c44bdd178a1e45ea4104550dd9d5b3e0ce 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { withRegex, isStarRating } = require('../test-validators')
 
 const isVscodeRating = withRegex(/[0-5].[0-9]{2}\/5?\s*\([0-9]*\)$/)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
index 698bab5957b2517a7ad709dd7bc5ee123d036750..3fa8f3f37c5926c96006cf3c39753204032a8d74 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 const { withRegex } = require('../test-validators')
 
 const isMarketplaceVersion = withRegex(/^v(\d+\.\d+\.\d+)(\.\d+)?$/)
diff --git a/services/waffle/waffle.tester.js b/services/waffle/waffle.tester.js
index a5e1a21b69e02c286deb4bfaaff6557fd26240c3..eb2c5f0d88d5df9436b8bb17c8d951b23ec5a9af 100644
--- a/services/waffle/waffle.tester.js
+++ b/services/waffle/waffle.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { invalidJSON } = require('../response-fixtures')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 const fakeData = [
   {
diff --git a/services/website/website.tester.js b/services/website/website.tester.js
index a2e4b8044876fc298c107ae0a6a999932dd2c9e6..dd88a2a66ac686e98cbd372e30d09f344eb134ca 100644
--- a/services/website/website.tester.js
+++ b/services/website/website.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('status of http://shields.io')
   .get('/website/http/shields.io.json?style=_shields_test')
diff --git a/services/wercker/wercker.service.js b/services/wercker/wercker.service.js
index 8d8e89d59ee57febb0952cb5973488b25ef7113c..a1c733cc1e48c1432c665a85f4522b8312c7ab4d 100644
--- a/services/wercker/wercker.service.js
+++ b/services/wercker/wercker.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
 const {
   isBuildStatus,
   renderBuildStatusBadge,
 } = require('../../lib/build-status')
+const { BaseJsonService } = require('..')
 
 const werckerSchema = Joi.array()
   .items(
diff --git a/services/wercker/wercker.tester.js b/services/wercker/wercker.tester.js
index fe2bea075ca8a18ea5fc0fbcfd7f8342bc1de152..d0c78bd01e5845157af64c7c89075c3d13abe29b 100644
--- a/services/wercker/wercker.tester.js
+++ b/services/wercker/wercker.tester.js
@@ -3,7 +3,7 @@
 const Joi = require('joi')
 const { isBuildStatus } = require('../../lib/build-status')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 t.create('Build status')
   .get('/build/wercker/go-wercker-api.json')
diff --git a/services/wheelmap/wheelmap.service.js b/services/wheelmap/wheelmap.service.js
index 095c9386ecc89443a541720d2b7f13f7792b0609..f463c893553e93e9580262f43468bfdd5ef5e030 100644
--- a/services/wheelmap/wheelmap.service.js
+++ b/services/wheelmap/wheelmap.service.js
@@ -1,9 +1,8 @@
 'use strict'
 
 const Joi = require('joi')
-const BaseJsonService = require('../base-json')
-
 const serverSecrets = require('../../lib/server-secrets')
+const { BaseJsonService } = require('..')
 
 const wheelmapSchema = Joi.object({
   node: Joi.object({
diff --git a/services/wheelmap/wheelmap.tester.js b/services/wheelmap/wheelmap.tester.js
index dac3ee0f835df93b44aff100823fa52454dcccce..3311389460cc96a7d7083f1395863a3be7f37780 100644
--- a/services/wheelmap/wheelmap.tester.js
+++ b/services/wheelmap/wheelmap.tester.js
@@ -2,7 +2,7 @@
 
 const serverSecrets = require('../../lib/server-secrets')
 
-const t = (module.exports = require('../create-service-tester')())
+const t = (module.exports = require('..').createServiceTester())
 
 const noToken = !serverSecrets.wheelmap_token
 function logTokenWarning() {
diff --git a/services/wordpress/wordpress-base.js b/services/wordpress/wordpress-base.js
index b3c96b3cb9dc07097048b630e026bc818b9770cb..7980c47176f98b1af2f3893d42ff45f2b7ec5e04 100644
--- a/services/wordpress/wordpress-base.js
+++ b/services/wordpress/wordpress-base.js
@@ -1,9 +1,7 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
 const Joi = require('joi')
-
-const { NotFound } = require('../errors')
+const { BaseJsonService, NotFound } = require('..')
 const { nonNegativeInteger } = require('../validators')
 
 const foundSchema = Joi.object()
diff --git a/services/wordpress/wordpress-downloads.service.js b/services/wordpress/wordpress-downloads.service.js
index 89bbc7db93979fa2230105a16a509c0136a7cf7c..2cfb340635a2fd7aecb3c9f33d18e43681064623 100644
--- a/services/wordpress/wordpress-downloads.service.js
+++ b/services/wordpress/wordpress-downloads.service.js
@@ -1,11 +1,10 @@
 'use strict'
 
-const BaseJsonService = require('../base-json')
-const BaseWordpress = require('./wordpress-base')
+const Joi = require('joi')
 const { metric } = require('../../lib/text-formatters')
 const { downloadCount } = require('../../lib/color-formatters')
-const { NotFound } = require('../errors')
-const Joi = require('joi')
+const { BaseJsonService, NotFound } = require('..')
+const BaseWordpress = require('./wordpress-base')
 
 const dateSchema = Joi.object()
   .pattern(Joi.date().iso(), Joi.number().integer())
diff --git a/services/wordpress/wordpress-downloads.tester.js b/services/wordpress/wordpress-downloads.tester.js
index cd2faf1cc9bb2d3fd2f78259bc27f68c99a12400..cc9c8925e0a99d17fd6d2aba6d2838d5f5edb9a7 100644
--- a/services/wordpress/wordpress-downloads.tester.js
+++ b/services/wordpress/wordpress-downloads.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const { isMetric, isMetricOverTimePeriod } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-platform.service.js b/services/wordpress/wordpress-platform.service.js
index b84ab1b4ec52946883784c36bc23be84f5fbdd2e..4eb073edbd4ea77d248fc2b18e70ae1150f01c1e 100644
--- a/services/wordpress/wordpress-platform.service.js
+++ b/services/wordpress/wordpress-platform.service.js
@@ -1,11 +1,11 @@
 'use strict'
 
-const BaseWordpress = require('./wordpress-base')
 const semver = require('semver')
 const Joi = require('joi')
 const { addv } = require('../../lib/text-formatters')
 const { version: versionColor } = require('../../lib/color-formatters')
-const { NotFound } = require('../errors')
+const { NotFound } = require('..')
+const BaseWordpress = require('./wordpress-base')
 
 const coreSchema = Joi.object()
   .keys({
diff --git a/services/wordpress/wordpress-platform.tester.js b/services/wordpress/wordpress-platform.tester.js
index 904f61dd6183068fe5d8a461b33e64adc5fb7afc..2b329c5afb16ed9d15f9e2a3cc1691fe60d906bb 100644
--- a/services/wordpress/wordpress-platform.tester.js
+++ b/services/wordpress/wordpress-platform.tester.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'wordpress',
   title: 'Wordpress Platform Tests',
-})
-module.exports = t
+}))
 
 t.create('Plugin Required WP Version')
   .get('/plugin/wp-version/akismet.json')
diff --git a/services/wordpress/wordpress-rating.tester.js b/services/wordpress/wordpress-rating.tester.js
index b3a19e9013a5051c110455e8c480dacf8bbcad98..91108521d8c793c61fffc0f42dabb4c683f290a7 100644
--- a/services/wordpress/wordpress-rating.tester.js
+++ b/services/wordpress/wordpress-rating.tester.js
@@ -1,7 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
+const { ServiceTester } = require('..')
 
 const { isStarRating } = require('../test-validators')
 
diff --git a/services/wordpress/wordpress-version.tester.js b/services/wordpress/wordpress-version.tester.js
index 6ab535be980a401c15cc04c7da266660801beb82..3a06609d7ebc15ce1b0eaf27e4d290f80e1718df 100644
--- a/services/wordpress/wordpress-version.tester.js
+++ b/services/wordpress/wordpress-version.tester.js
@@ -1,15 +1,13 @@
 'use strict'
 
 const Joi = require('joi')
-const ServiceTester = require('../service-tester')
-
+const { ServiceTester } = require('..')
 const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
 
-const t = new ServiceTester({
+const t = (module.exports = new ServiceTester({
   id: 'wordpress',
   title: 'Wordpress Version Tests',
-})
-module.exports = t
+}))
 
 t.create('Plugin Version')
   .get('/plugin/v/akismet.json')