diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index 8da96c9e3c961bc2d945dcb725fc893e59153d53..ad606f9b95ec099b6a75a0015dc547f9d920fddd 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -26,15 +26,13 @@ function determineLockFileDirs(config, packageFiles) {
 
   for (const upgrade of config.upgrades) {
     if (upgrade.type === 'lockFileMaintenance') {
-      // TODO: support lerna
       // Return every directory that contains a lockfile
       for (const packageFile of packageFiles.npm) {
         if (
           packageFile.lernaDir &&
           (packageFile.npmLock || packageFile.yarnLock)
         ) {
-          logger.info('Skipping lerna lockFileMaintenance - unsupported');
-          // TODO: lernaDirs.push(packageFile.lernaDir);
+          lernaDirs.push(packageFile.lernaDir);
         } else {
           yarnLockDirs.push(packageFile.yarnLock);
           npmLockDirs.push(packageFile.npmLock);
@@ -460,17 +458,16 @@ async function getAdditionalFiles(config, packageFiles) {
 
   for (const lernaDir of dirs.lernaDirs) {
     let lockFile;
-    if (config.lernaClient === 'npm') {
-      lockFile = config.npmLock || 'package-lock.json';
-    } else {
-      lockFile = config.yarnLock || 'yarn.lock';
-    }
-    logger.debug(
-      { lernaClient: config.lernaClient, lockFile },
-      'Generating lock files using lerna'
+    logger.debug(`Finding package.json for lerna directory "${lernaDir}"`);
+    const lernaPackageFile = packageFiles.npm.find(
+      p => path.dirname(p.packageFile) === lernaDir
     );
+    if (!lernaPackageFile) {
+      logger.debug('No matching package.json found');
+      throw new Error('lerna-no-lockfile');
+    }
     const res = await lerna.generateLockFiles(
-      config.lernaClient,
+      lernaPackageFile.lernaClient,
       upath.join(config.tmpDir.path, lernaDir),
       env
     );