diff --git a/lib/datasource/github.js b/lib/datasource/github.js
index fc4c556659346745657d3c991c3444b068eab61d..7c525358009a03e7b74ad1025848f7f89ce3781a 100644
--- a/lib/datasource/github.js
+++ b/lib/datasource/github.js
@@ -128,7 +128,7 @@ async function getPkgReleases(purl, config) {
     return null;
   }
   // Filter by semver if no versionScheme provided
-  const { isVersion, sortVersions } = versioning(versionScheme);
+  const { isVersion, sortVersions } = versioning.get(versionScheme);
   // Return a sorted list of valid Versions
   versions = versions.filter(isVersion).sort(sortVersions);
   const dependency = {
diff --git a/lib/util/package-rules.js b/lib/util/package-rules.js
index 7fbd6a2394889e6615a7927f961173bda91f6454..b9b340ce3fdc3e7eef3191cd807c41e595aa73bb 100644
--- a/lib/util/package-rules.js
+++ b/lib/util/package-rules.js
@@ -112,7 +112,7 @@ function applyPackageRules(inputConfig) {
       positiveMatch = positiveMatch || !isMatch;
     }
     if (matchCurrentVersion) {
-      const { matches, isVersion } = versioning(versionScheme);
+      const { matches, isVersion } = versioning.get(versionScheme);
       const compareVersion = isVersion(currentValue)
         ? currentValue // it's a version so we can match against it
         : fromVersion; // need to match against this fromVersion, if available
diff --git a/lib/versioning/index.js b/lib/versioning/index.js
index 3ef4836e056659ec64ba1fce21a73baf30d86927..8721b5aedd2ca6d9e4c0c81aa2e4133c87f78121 100644
--- a/lib/versioning/index.js
+++ b/lib/versioning/index.js
@@ -14,7 +14,12 @@ const schemes = {
   pep440,
 };
 
-module.exports = function getVersionScheme(versionScheme) {
+module.exports = {
+  get,
+  schemes,
+};
+
+function get(versionScheme) {
   if (!versionScheme) {
     logger.debug('Missing versionScheme');
     return semver;
@@ -25,4 +30,4 @@ module.exports = function getVersionScheme(versionScheme) {
     return semver;
   }
   return scheme;
-};
+}
diff --git a/lib/workers/pr/changelog/index.js b/lib/workers/pr/changelog/index.js
index 27604242661b65560768e08eb26546f9c6c92110..bd2f537db1c2d32d2d38e38ddecd1b4053570c87 100644
--- a/lib/workers/pr/changelog/index.js
+++ b/lib/workers/pr/changelog/index.js
@@ -14,7 +14,7 @@ async function getChangeLogJSON(args) {
   // releases is too noisy in the logs
   const { releases, ...param } = args;
   logger.debug({ args: param }, `getChangeLogJSON(args)`);
-  const { equals } = versioning(versionScheme);
+  const { equals } = versioning.get(versionScheme);
   if (!fromVersion || equals(fromVersion, toVersion)) {
     return null;
   }
diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js
index b59964ed48f905e40e5c4facb9a9445ebbdb4933..c3369b154e9dda1e6de8a288324c150798035c12 100644
--- a/lib/workers/pr/changelog/source-github.js
+++ b/lib/workers/pr/changelog/source-github.js
@@ -9,7 +9,7 @@ module.exports = {
 };
 
 async function getTags(endpoint, versionScheme, repository) {
-  const { isVersion } = versioning(versionScheme);
+  const { isVersion } = versioning.get(versionScheme);
   let url = endpoint
     ? endpoint.replace(/\/?$/, '/')
     : 'https://api.github.com/';
@@ -49,7 +49,7 @@ async function getChangeLogJSON({
     logger.debug('No release notes for @types');
     return null;
   }
-  const { isVersion, equals, isGreaterThan, sortVersions } = versioning(
+  const { isVersion, equals, isGreaterThan, sortVersions } = versioning.get(
     versionScheme
   );
   const { protocol, host, pathname } = URL.parse(repositoryUrl);
diff --git a/lib/workers/pr/pr-body.js b/lib/workers/pr/pr-body.js
index e51eb010ae0ec2a7847a348cbd44fe0568bb4edf..723fcd08cd1ec18779dd85fb1e2ef745943f5590 100644
--- a/lib/workers/pr/pr-body.js
+++ b/lib/workers/pr/pr-body.js
@@ -60,7 +60,7 @@ async function getPrBody(config) {
     // istanbul ignore if
     if (updateType === 'minor') {
       try {
-        const { getMinor } = versioning(versionScheme);
+        const { getMinor } = versioning.get(versionScheme);
         if (getMinor(fromVersion) === getMinor(toVersion)) {
           upgrade.updateType = 'patch';
         }
diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js
index b28a2e4687bf3f47203b6047cf6081076cb0924c..2cb6eca5aaa2dfe24f3f3b0d3bcce30785ccc903 100644
--- a/lib/workers/repository/process/lookup/filter.js
+++ b/lib/workers/repository/process/lookup/filter.js
@@ -26,7 +26,7 @@ function filterVersions(
     isStable,
     isValid,
     matches,
-  } = versioning(versionScheme);
+  } = versioning.get(versionScheme);
   if (!fromVersion) {
     return [];
   }
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index dcc7357a271bcec2bc5f487f8598c2a5235e25bd..26e20f11623376fb8ed5774a78b9d1477c531925 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -26,7 +26,7 @@ async function lookupUpdates(config) {
     isVersion,
     matches,
     getNewValue,
-  } = versioning(config.versionScheme);
+  } = versioning.get(config.versionScheme);
   const res = { updates: [], warnings: [] };
   if (isValid(currentValue)) {
     const dependency = await getPkgReleases(config.purl, config);
@@ -255,7 +255,7 @@ async function lookupUpdates(config) {
 
 function getType(config, fromVersion, toVersion) {
   const { versionScheme, rangeStrategy, currentValue } = config;
-  const { getMajor, getMinor, matches } = versioning(versionScheme);
+  const { getMajor, getMinor, matches } = versioning.get(versionScheme);
   if (rangeStrategy === 'bump' && matches(toVersion, currentValue)) {
     return 'bump';
   }
@@ -292,9 +292,11 @@ function getBucket(config, update) {
 
 function getFromVersion(config, rangeStrategy, allVersions) {
   const { currentValue, lockedVersion, versionScheme } = config;
-  const { isVersion, maxSatisfyingVersion, minSatisfyingVersion } = versioning(
-    versionScheme
-  );
+  const {
+    isVersion,
+    maxSatisfyingVersion,
+    minSatisfyingVersion,
+  } = versioning.get(versionScheme);
   if (isVersion(currentValue)) {
     return currentValue;
   }
diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js
index 713b245399d2649a4d56072268e04385504570f2..8755350b2ccf5d16f2ccd157fa339ab33f2683e0 100644
--- a/lib/workers/repository/process/lookup/rollback.js
+++ b/lib/workers/repository/process/lookup/rollback.js
@@ -6,9 +6,12 @@ module.exports = {
 
 function getRollbackUpdate(config, versions) {
   const { packageFile, versionScheme, depName, currentValue } = config;
-  const { getMajor, isLessThanRange, getNewValue, sortVersions } = versioning(
-    versionScheme
-  );
+  const {
+    getMajor,
+    isLessThanRange,
+    getNewValue,
+    sortVersions,
+  } = versioning.get(versionScheme);
   // istanbul ignore if
   if (!isLessThanRange) {
     logger.info(
diff --git a/test/versioning/index.spec.js b/test/versioning/index.spec.js
index 9e7fb786b710146f6b3e02f96f30672fbbca1166..0f4e8e885eeb31b91ac783e836768182b6f7506c 100644
--- a/test/versioning/index.spec.js
+++ b/test/versioning/index.spec.js
@@ -1,14 +1,14 @@
 const versioning = require('../../lib/versioning');
 
-describe('versioning(versionScheme)', () => {
+describe('versioning.get(versionScheme)', () => {
   it('should fallback to semver', () => {
-    expect(versioning(undefined)).toBe(versioning('semver'));
-    expect(versioning('unknown')).toBe(versioning('semver'));
+    expect(versioning.get(undefined)).toBe(versioning.get('semver'));
+    expect(versioning.get('unknown')).toBe(versioning.get('semver'));
   });
 
   it('should return the same interface', () => {
-    const semverApi = Object.keys(versioning('semver'));
-    const pep440Api = Object.keys(versioning('pep440')).concat(
+    const semverApi = Object.keys(versioning.get('semver'));
+    const pep440Api = Object.keys(versioning.get('pep440')).concat(
       'isLessThanRange'
     );
     expect(pep440Api.sort()).toEqual(semverApi.sort());