diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts
index 888c17947cc9236b03d4cf37ff733530655da991..bfd5057152de72ae07dda40d0ba346cc9f959fd0 100644
--- a/lib/manager/maven/extract.ts
+++ b/lib/manager/maven/extract.ts
@@ -39,11 +39,13 @@ function depFromNode(node: XmlElement): PackageDependency {
     const versionNode = node.descendantWithPath('version');
     const fileReplacePosition = versionNode.position;
     const datasource = 'maven';
+    const registryUrls = [DEFAULT_MAVEN_REPO];
     return {
       datasource,
       depName,
       currentValue,
       fileReplacePosition,
+      registryUrls,
     };
   }
   return null;
@@ -163,14 +165,18 @@ export function extractPackage(rawContent: string, packageFile: string = null) {
 
   const repositories = project.childNamed('repositories');
   if (repositories && repositories.children) {
-    const repoUrls = [DEFAULT_MAVEN_REPO];
+    const repoUrls = [];
     for (const repo of repositories.childrenNamed('repository')) {
       const repoUrl = repo.valueWithPath('url');
       if (repoUrl) {
         repoUrls.push(repoUrl);
       }
     }
-    result.registryUrls = repoUrls;
+    result.deps.forEach(dep => {
+      if (dep.registryUrls) {
+        repoUrls.forEach(url => dep.registryUrls.push(url));
+      }
+    });
   }
 
   if (packageFile && project.childNamed('parent')) {
@@ -182,12 +188,11 @@ export function extractPackage(rawContent: string, packageFile: string = null) {
   return result;
 }
 
-export function resolveParents(packages: PackageFile[]): PackageFile[] {
+export function resolveProps(packages: PackageFile[]): PackageFile[] {
   const packageFileNames: string[] = [];
   const extractedPackages: Record<string, PackageFile> = {};
   const extractedDeps: Record<string, PackageDependency[]> = {};
   const extractedProps: Record<string, MavenProp> = {};
-  const registryUrls: Record<string, Set<string>> = {};
   packages.forEach(pkg => {
     const name = pkg.packageFile;
     packageFileNames.push(name);
@@ -199,39 +204,21 @@ export function resolveParents(packages: PackageFile[]): PackageFile[] {
   // and merge them in reverse order,
   // which allows inheritance/overriding.
   packageFileNames.forEach(name => {
-    registryUrls[name] = new Set();
-    const propsHierarchy: Record<string, MavenProp>[] = [];
-    const visitedPackages: Set<string> = new Set();
+    const hierarchy: Record<string, MavenProp>[] = [];
+    const alreadyExtracted: Record<string, boolean> = {};
     let pkg = extractedPackages[name];
     while (pkg) {
-      propsHierarchy.unshift(pkg.mavenProps);
-
-      if (pkg.registryUrls) {
-        pkg.registryUrls.forEach(url => {
-          registryUrls[name].add(url);
-        });
-      }
-
-      if (pkg.parent && !visitedPackages.has(pkg.parent)) {
-        visitedPackages.add(pkg.parent);
+      hierarchy.unshift(pkg.mavenProps);
+      if (pkg.parent && !alreadyExtracted[pkg.parent]) {
+        alreadyExtracted[pkg.parent] = true;
         pkg = extractedPackages[pkg.parent];
       } else {
         pkg = null;
       }
     }
-    propsHierarchy.unshift({});
+    hierarchy.unshift({});
     // @ts-ignore
-    extractedProps[name] = Object.assign.apply(null, propsHierarchy);
-  });
-
-  // Resolve registryUrls
-  packageFileNames.forEach(name => {
-    const pkg = extractedPackages[name];
-    const urls = [...registryUrls[name]];
-    pkg.deps.forEach(rawDep => {
-      rawDep.registryUrls = urls; // eslint-disable-line no-param-reassign
-    });
-    delete pkg.registryUrls;
+    extractedProps[name] = Object.assign.apply(null, hierarchy);
   });
 
   // Resolve placeholders
@@ -278,5 +265,6 @@ export async function extractAllPackageFiles(
       logger.info({ packageFile }, 'packageFile has no content');
     }
   }
-  return cleanResult(resolveParents(packages));
+
+  return cleanResult(resolveProps(packages));
 }
diff --git a/test/manager/maven/__snapshots__/extract.spec.ts.snap b/test/manager/maven/__snapshots__/extract.spec.ts.snap
index 60b96c15f169d5b5e23c2f517287f6ef69c0361e..601c732451fc11802c0837f6a4d3083fc71af5e2 100644
--- a/test/manager/maven/__snapshots__/extract.spec.ts.snap
+++ b/test/manager/maven/__snapshots__/extract.spec.ts.snap
@@ -9,78 +9,130 @@ Object {
       "datasource": "maven",
       "depName": "org.example:parent",
       "fileReplacePosition": 186,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "org.example:foo",
       "fileReplacePosition": 905,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "1.0.0",
       "datasource": "maven",
       "depName": "org.example:bar",
       "fileReplacePosition": 1053,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "1.8.1",
       "datasource": "maven",
       "depName": "org.apache.maven.scm:maven-scm-provider-gitexe",
       "fileReplacePosition": 1485,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "org.example:\${artifact-id-placeholder}",
       "fileReplacePosition": 2230,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "\${group-id-placeholder}:baz",
       "fileReplacePosition": 2380,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "\${quuxVersion}",
       "datasource": "maven",
       "depName": "\${quuxGroup}:\${quuxId}",
       "fileReplacePosition": 2525,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "\${quuxVersion}",
       "datasource": "maven",
       "depName": "\${quuxGroup}:\${quuxId}-test",
       "fileReplacePosition": 2684,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "1.2.3",
       "datasource": "maven",
       "depName": "org.example:quuz",
       "fileReplacePosition": 2832,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "it's not a version",
       "datasource": "maven",
       "depName": "org.example:quuuz",
       "fileReplacePosition": 2972,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "[1.0.0]",
       "datasource": "maven",
       "depName": "org.example:hard-range",
       "fileReplacePosition": 3130,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "\${profile-placeholder}",
       "datasource": "maven",
       "depName": "org.example:profile-artifact",
       "fileReplacePosition": 3392,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
     Object {
       "currentValue": "2.17",
       "datasource": "maven",
       "depName": "org.apache.maven.plugins:maven-checkstyle-plugin",
       "fileReplacePosition": 3668,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
     },
   ],
   "mavenProps": Object {
@@ -101,9 +153,5 @@ Object {
     },
   },
   "packageFile": null,
-  "registryUrls": Array [
-    "https://repo.maven.apache.org/maven2",
-    "https://maven.atlassian.com/content/repositories/atlassian-public/",
-  ],
 }
 `;
diff --git a/test/manager/maven/index.spec.ts b/test/manager/maven/index.spec.ts
index 11a30d65b9345ecf16f23fdab50b12cc23767e12..1f43c9c35fd53b9c72820122303ac7972b024343 100644
--- a/test/manager/maven/index.spec.ts
+++ b/test/manager/maven/index.spec.ts
@@ -1,7 +1,7 @@
 import { readFileSync } from 'fs';
 import {
   extractPackage,
-  resolveParents,
+  resolveProps,
 } from '../../../lib/manager/maven/extract';
 import {
   extractAllPackageFiles,
@@ -77,7 +77,7 @@ describe('manager/maven', () => {
         depName === 'org.example:quux';
       const newValue = '9.9.9.9-final';
 
-      const packages = resolveParents([
+      const packages = resolveProps([
         extractPackage(pomParent, 'parent.pom.xml'),
         extractPackage(pomChild, 'child.pom.xml'),
       ]);
@@ -85,7 +85,7 @@ describe('manager/maven', () => {
       const dep = deps.find(finder);
       const upgrade = { ...dep, newValue };
       const updatedContent = updateDependency(pomParent, upgrade);
-      const [updatedPkg] = resolveParents([
+      const [updatedPkg] = resolveProps([
         extractPackage(updatedContent, 'parent.pom.xml'),
         extractPackage(pomChild, 'child.pom.xml'),
       ]);