diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js
index e4328fc92633244eca1f0163c56ceccc46156826..87aa71187016c70432ec33d3c2eb8e61aff44c73 100644
--- a/lib/versioning/semver/index.js
+++ b/lib/versioning/semver/index.js
@@ -12,6 +12,9 @@ const {
   satisfies: matches,
   valid: isPinnedVersion,
   validRange,
+  ltr: isLessThanRange,
+  gt: isGreaterThan,
+  eq: equals,
 } = semver;
 
 const padRange = range => range + '.0'.repeat(3 - range.split('.').length);
@@ -26,17 +29,12 @@ const isRange = input => isValid(input) && !isPinnedVersion(input);
 // If this is left as an alias, inputs like "17.04.0" throw errors
 const isValid = input => validRange(input);
 
-const isLessThan = (version, base) =>
-  isPinnedVersion(base) ? semver.lt(version, base) : semver.ltr(version, base);
-
-const isGreaterThan = (version, base) =>
-  isPinnedVersion(base) ? semver.gt(version, base) : semver.gtr(version, base);
-
 module.exports = {
+  equals,
   getMajor,
   getMinor,
   isGreaterThan,
-  isLessThan,
+  isLessThanRange,
   isPinnedVersion,
   isRange,
   isStable,
diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js
index 3a09eff2bf919a108d7f7abd12bf7a712479f4fd..0ead9b86a792c879460788cb03dc25b36456ac07 100644
--- a/lib/workers/repository/process/lookup/filter.js
+++ b/lib/workers/repository/process/lookup/filter.js
@@ -1,17 +1,19 @@
-const {
-  getMajor,
-  isGreaterThan,
-  isStable,
-  isValid,
-  matches,
-} = require('../../../../versioning/semver');
+const versioning = require('../../../../versioning');
 
 module.exports = {
   filterVersions,
 };
 
 function filterVersions(config, fromVersion, latestVersion, versions) {
-  const { ignoreUnstable, respectLatest, allowedVersions } = config;
+  const {
+    versionScheme,
+    ignoreUnstable,
+    respectLatest,
+    allowedVersions,
+  } = config;
+  const { getMajor, isGreaterThan, isStable, isValid, matches } = versioning(
+    versionScheme
+  );
   if (!fromVersion) {
     return [];
   }
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 2e42480f44cdec81a1cf7bca2b24e692fec16abb..33f5a8dd4053455d5f0c9c747626c680a7da8582 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -1,4 +1,4 @@
-const versioning = require('../../../../versioning/semver');
+const versioning = require('../../../../versioning');
 const moment = require('moment');
 const { getRollbackUpdate } = require('./rollback');
 const { getRangeStrategy } = require('../../../../manager');
@@ -7,23 +7,20 @@ const npmApi = require('../../../../datasource/npm');
 const github = require('../../../../datasource/github');
 const { parse } = require('../../../../../lib/util/purl');
 
-const {
-  getMajor,
-  getMinor,
-  isGreaterThan,
-  isRange,
-  matches,
-  maxSatisfyingVersion,
-  minSatisfyingVersion,
-  rangify,
-} = versioning;
-
 module.exports = {
   lookupUpdates,
 };
 
 async function lookupUpdates(config) {
-  const { depName, currentVersion, lockedVersion } = config;
+  const { versionScheme, depName, currentVersion, lockedVersion } = config;
+  const {
+    getMajor,
+    getMinor,
+    isGreaterThan,
+    isRange,
+    matches,
+    rangify,
+  } = versioning(versionScheme);
   logger.debug({ depName, currentVersion }, 'lookupUpdates');
   let dependency;
   const purl = parse(config.purl);
@@ -77,6 +74,7 @@ async function lookupUpdates(config) {
   }
   const rangeStrategy = getRangeStrategy(config);
   const fromVersion = getFromVersion(
+    config,
     currentVersion,
     rangeStrategy,
     lockedVersion,
@@ -143,6 +141,8 @@ async function lookupUpdates(config) {
 }
 
 function getType(config, fromVersion, toVersion) {
+  const { versionScheme } = config;
+  const { getMajor, getMinor } = versioning(versionScheme);
   if (getMajor(toVersion) > getMajor(fromVersion)) {
     return 'major';
   }
@@ -176,11 +176,16 @@ function getBucket(config, update) {
 }
 
 function getFromVersion(
+  config,
   currentVersion,
   rangeStrategy,
   lockedVersion,
   allVersions
 ) {
+  const { versionScheme } = config;
+  const { isRange, maxSatisfyingVersion, minSatisfyingVersion } = versioning(
+    versionScheme
+  );
   if (!isRange(currentVersion)) {
     return currentVersion;
   }
diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js
index baf41cc2be72ef7364edd291005e68fc9c5630bc..ee3b99b6e742b981a26c0f21f44da4a7802e5b9b 100644
--- a/lib/workers/repository/process/lookup/rollback.js
+++ b/lib/workers/repository/process/lookup/rollback.js
@@ -1,18 +1,24 @@
-const {
-  getMajor,
-  isLessThan,
-  rangify,
-  sortVersions,
-} = require('../../../../versioning/semver');
+const versioning = require('../../../../versioning');
 
 module.exports = {
   getRollbackUpdate,
 };
 
 function getRollbackUpdate(config, versions) {
-  const { packageFile, depName, currentVersion } = config;
+  const { packageFile, versionScheme, depName, currentVersion } = config;
+  const { getMajor, isLessThanRange, rangify, sortVersions } = versioning(
+    versionScheme
+  );
+  // istanbul ignore if
+  if (!isLessThanRange) {
+    logger.info(
+      { versionScheme },
+      'Current version scheme does not suppot isLessThanRange()'
+    );
+    return [];
+  }
   const lessThanVersions = versions.filter(version =>
-    isLessThan(version, currentVersion)
+    isLessThanRange(version, currentVersion)
   );
   // istanbul ignore if
   if (!lessThanVersions.length) {
diff --git a/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap b/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap
index 8cc701bba7684051cc3202c6dbb318c10bc5044b..308642846fe6b26c48968704cc946cfcbfcadd7e 100644
--- a/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap
+++ b/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap
@@ -13,17 +13,3 @@ Object {
   "updatedLockFiles": Array [],
 }
 `;
-
-exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if lock file maintenance exists 1`] = `
-Object {
-  "lockFileErrors": Array [],
-  "updatedLockFiles": Array [],
-}
-`;
-
-exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if updateLockFiles false 1`] = `
-Object {
-  "lockFileErrors": Array [],
-  "updatedLockFiles": Array [],
-}
-`;
diff --git a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
index 17a00d99069053a7ac6834dd381969dc9502b8cb..301e79ade45bfaccdfbd4d0e852d36f2cfeacb8c 100644
--- a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
+++ b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
@@ -38,6 +38,39 @@ Array [
 ]
 `;
 
+exports[`manager/npm/lookup .lookupUpdates() handles PEP440 1`] = `
+Array [
+  Object {
+    "isPin": true,
+    "newVersion": "0.9.4",
+    "newVersionMajor": 0,
+    "repositoryUrl": "https://github.com/kriskowal/q",
+    "type": "pin",
+    "unpublishable": false,
+  },
+  Object {
+    "fromVersion": "0.9.4",
+    "newVersion": "0.9.7",
+    "newVersionMajor": 0,
+    "newVersionMinor": 9,
+    "repositoryUrl": "https://github.com/kriskowal/q",
+    "toVersion": "0.9.7",
+    "type": "minor",
+    "unpublishable": false,
+  },
+  Object {
+    "fromVersion": "0.9.4",
+    "newVersion": "1.4.1",
+    "newVersionMajor": 1,
+    "newVersionMinor": 4,
+    "repositoryUrl": "https://github.com/kriskowal/q",
+    "toVersion": "1.4.1",
+    "type": "major",
+    "unpublishable": false,
+  },
+]
+`;
+
 exports[`manager/npm/lookup .lookupUpdates() handles github 404 1`] = `
 Array [
   Object {
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index 4083507580819a8351ea9f66c1678cb9cf053d32..07f8ec837ec77b5edcad6e142b8b81869e3a1cb5 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -810,5 +810,20 @@ describe('manager/npm/lookup', () => {
       config.currentVersion = '1.0.0';
       expect(await lookup.lookupUpdates(config)).toMatchSnapshot();
     });
+    it('handles PEP440', async () => {
+      config.manager = 'pip_requirements';
+      config.versionScheme = 'pep440';
+      config.rangeStrategy = 'pin';
+      config.lockedVersion = '0.9.4';
+      config.currentVersion = '~=0.9';
+      config.depName = 'q';
+      // TODO: we are using npm as source, since purl for pypi is not implimented
+      config.purl = 'pkg:npm/q';
+      nock('https://registry.npmjs.org')
+        .get('/q')
+        .reply(200, qJson);
+      const res = await lookup.lookupUpdates(config);
+      expect(res).toMatchSnapshot();
+    });
   });
 });