diff --git a/lib/versioning/pep440/range.js b/lib/versioning/pep440/range.js
index 092de87e74ebc891e3864ea8969bca73b50d425d..e4a9e21a6741137d82b352595bd9677ed267cb70 100644
--- a/lib/versioning/pep440/range.js
+++ b/lib/versioning/pep440/range.js
@@ -2,7 +2,7 @@ module.exports = {
   getNewValue,
 };
 
-function getNewValue(config, currentValue, fromVersion, toVersion) {
+function getNewValue(config, fromVersion, toVersion) {
   const { rangeStrategy } = config;
   // istanbul ignore if
   if (rangeStrategy !== 'pin') {
diff --git a/lib/versioning/semver/range.js b/lib/versioning/semver/range.js
index 5a047141505193254451875574e1dbb5432bd476..89571cd306ab4e3a22245d11a1e75453c6061820 100644
--- a/lib/versioning/semver/range.js
+++ b/lib/versioning/semver/range.js
@@ -1,13 +1,13 @@
-const { inc: increment, major, minor, valid } = require('semver');
+const { inc: increment, major, minor, valid: isVersion } = require('semver');
 const { parseRange } = require('semver-utils');
 
 module.exports = {
   getNewValue,
 };
 
-function getNewValue(config, currentValue, fromVersion, toVersion) {
-  const { rangeStrategy } = config;
-  if (rangeStrategy === 'pin' || valid(currentValue)) {
+function getNewValue(config, fromVersion, toVersion) {
+  const { currentValue, rangeStrategy } = config;
+  if (rangeStrategy === 'pin' || isVersion(currentValue)) {
     return toVersion;
   }
   const parsedRange = parseRange(currentValue);
@@ -15,7 +15,6 @@ function getNewValue(config, currentValue, fromVersion, toVersion) {
   if (rangeStrategy === 'widen') {
     const newValue = getNewValue(
       { ...config, rangeStrategy: 'replace' },
-      currentValue,
       fromVersion,
       toVersion
     );
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 1947b5da3bfa10bdc463e355d2855a06301a538c..3267151f0284bb8d9b6979af46c894831588c779 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -12,7 +12,8 @@ module.exports = {
 };
 
 async function lookupUpdates(config) {
-  const { versionScheme, depName, currentValue, lockedVersion } = config;
+  const { depName, currentValue } = config;
+  logger.debug({ depName, currentValue }, 'lookupUpdates');
   const {
     getMajor,
     getMinor,
@@ -20,15 +21,15 @@ async function lookupUpdates(config) {
     isRange,
     matches,
     getNewValue,
-  } = versioning(versionScheme);
-  logger.debug({ depName, currentValue }, 'lookupUpdates');
-  let dependency;
+  } = versioning(config.versionScheme);
   const purl = parse(config.purl);
   if (!purl) {
     logger.error('Missing purl');
     return [];
   }
+  let dependency;
   if (purl.type === 'npm') {
+    // TODO: move this into datasource
     npmApi.setNpmrc(
       config.npmrc,
       config.global ? config.global.exposeEnv : false
@@ -50,14 +51,15 @@ async function lookupUpdates(config) {
       { dependency: depName, packageFile: config.packageFile },
       result.message
     );
+    // TODO: return an object
     return [result];
   }
-  const { latestVersion } = dependency;
   const allVersions = Object.keys(dependency.versions);
   // istanbul ignore if
   if (allVersions.length === 0) {
     const message = `No versions returned from registry for this package`;
     logger.warn({ dependency }, message);
+    // TODO: return an object
     return [
       {
         type: 'warning',
@@ -65,6 +67,7 @@ async function lookupUpdates(config) {
       },
     ];
   }
+  // Check that existing constraint can be satisfied
   const allSatisfyingVersions = allVersions.filter(version =>
     matches(version, currentValue)
   );
@@ -73,13 +76,7 @@ async function lookupUpdates(config) {
     updates.push(getRollbackUpdate(config, allVersions));
   }
   const rangeStrategy = getRangeStrategy(config);
-  const fromVersion = getFromVersion(
-    config,
-    currentValue,
-    rangeStrategy,
-    lockedVersion,
-    allVersions
-  );
+  const fromVersion = getFromVersion(config, rangeStrategy, allVersions);
   if (isRange(currentValue) && rangeStrategy === 'pin') {
     updates.push({
       type: 'pin',
@@ -89,10 +86,11 @@ async function lookupUpdates(config) {
       unpublishable: false,
     });
   }
+  // Filter latest, unstable, etc
   const filteredVersions = filterVersions(
     config,
     fromVersion,
-    latestVersion,
+    dependency.latestVersion,
     allVersions
   );
   if (!filteredVersions.length) {
@@ -101,7 +99,7 @@ async function lookupUpdates(config) {
   const buckets = {};
   for (const toVersion of filteredVersions) {
     const update = { fromVersion, toVersion };
-    update.newValue = getNewValue(config, currentValue, fromVersion, toVersion);
+    update.newValue = getNewValue(config, fromVersion, toVersion);
     if (!update.newValue || update.newValue === currentValue) {
       continue; // eslint-disable-line no-continue
     }
@@ -175,14 +173,8 @@ function getBucket(config, update) {
   return type;
 }
 
-function getFromVersion(
-  config,
-  currentValue,
-  rangeStrategy,
-  lockedVersion,
-  allVersions
-) {
-  const { versionScheme } = config;
+function getFromVersion(config, rangeStrategy, allVersions) {
+  const { currentValue, lockedVersion, versionScheme } = config;
   const { isRange, maxSatisfyingVersion, minSatisfyingVersion } = versioning(
     versionScheme
   );
diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js
index 3e6fed8a4dcf9ee80d539c974f823b5ec49cc9b8..2da5e4729efd22562cc2e9a53d3e90e0473ea34a 100644
--- a/lib/workers/repository/process/lookup/rollback.js
+++ b/lib/workers/repository/process/lookup/rollback.js
@@ -13,7 +13,7 @@ function getRollbackUpdate(config, versions) {
   if (!isLessThanRange) {
     logger.info(
       { versionScheme },
-      'Current version scheme does not suppot isLessThanRange()'
+      'Current version scheme does not support isLessThanRange()'
     );
     return [];
   }
@@ -35,7 +35,7 @@ function getRollbackUpdate(config, versions) {
   lessThanVersions.sort(sortVersions);
   const toVersion = lessThanVersions.pop();
   let fromVersion;
-  const newValue = getNewValue(config, currentValue, fromVersion, toVersion);
+  const newValue = getNewValue(config, fromVersion, toVersion);
   return {
     type: 'rollback',
     branchName:
diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js
index 3f5d5d7218f9d56b6a42c065a490676c76a2cdd7..fa2b4df48ea9c3e11ac6d80dbfbbbb5ae54cb034 100644
--- a/test/versioning/semver.spec.js
+++ b/test/versioning/semver.spec.js
@@ -40,14 +40,17 @@ describe('semver.isRange(input)', () => {
 describe('semver.getNewValue()', () => {
   it('bumps equals', () => {
     expect(
-      semver.getNewValue({ rangeStrategy: 'bump' }, '=1.0.0', '1.0.0', '1.1.0')
+      semver.getNewValue(
+        { currentValue: '=1.0.0', rangeStrategy: 'bump' },
+        '1.0.0',
+        '1.1.0'
+      )
     ).toEqual('=1.1.0');
   });
   it('replaces equals', () => {
     expect(
       semver.getNewValue(
-        { rangeStrategy: 'replace' },
-        '=1.0.0',
+        { currentValue: '=1.0.0', rangeStrategy: 'replace' },
         '1.0.0',
         '1.1.0'
       )