diff --git a/doc/release-notes.html b/doc/release-notes.html
index b29528c..63c4fcf 100644
--- a/doc/release-notes.html
+++ b/doc/release-notes.html
@@ -64,6 +64,7 @@
 - IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevi&#269;ius)
 
 - NEW: Lets ssh-based resolvers use an ~/.ssh/config file to find username/hostname/keyfile options (Thanks to Colin Stanfill)
+- NEW: Add ivy.maven.sources.lookup and ivy.maven.javadoc.lookup variables to control the lookup of the additional artifacts. Defaults to true, for backward compatibility (IVY-1529)
 
 <!-- Samples :
 - NEW: bla bla bla (IVY-1234) (Thanks to Jane Doe)
diff --git a/src/java/org/apache/ivy/core/cache/DefaultResolutionCacheManager.java b/src/java/org/apache/ivy/core/cache/DefaultResolutionCacheManager.java
index 2683702..d6bc2d7 100644
--- a/src/java/org/apache/ivy/core/cache/DefaultResolutionCacheManager.java
+++ b/src/java/org/apache/ivy/core/cache/DefaultResolutionCacheManager.java
@@ -274,6 +274,10 @@
         public Namespace getContextNamespace() {
             return delegate.getContextNamespace();
         }
+
+        public String getVariable(String value) {
+            return delegate.getVariable(value);
+        }
     }
 
     private static class MapURLResolver extends RelativeUrlResolver {
diff --git a/src/java/org/apache/ivy/core/cache/ParserSettingsMonitor.java b/src/java/org/apache/ivy/core/cache/ParserSettingsMonitor.java
index 58c7f31..35da0bd 100644
--- a/src/java/org/apache/ivy/core/cache/ParserSettingsMonitor.java
+++ b/src/java/org/apache/ivy/core/cache/ParserSettingsMonitor.java
@@ -150,5 +150,9 @@
             }
             return r;
         }
+
+        public String getVariable(String value) {
+            return delegatedSettings.getVariable(value);
+        }
     };
 }
diff --git a/src/java/org/apache/ivy/plugins/parser/ParserSettings.java b/src/java/org/apache/ivy/plugins/parser/ParserSettings.java
index fc10fd3..662736c 100644
--- a/src/java/org/apache/ivy/plugins/parser/ParserSettings.java
+++ b/src/java/org/apache/ivy/plugins/parser/ParserSettings.java
@@ -59,4 +59,5 @@
      */
     Namespace getContextNamespace();
 
+    String getVariable(String string);
 }
diff --git a/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java b/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
index f4d6206..f2d3cfc 100644
--- a/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
+++ b/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
@@ -315,6 +315,14 @@
             // no main artifact in pom, we don't need to search for meta artifacts
             return;
         }
+
+        boolean sourcesLookup = !"false".equals(ivySettings.getVariable("ivy.maven.lookup.sources"));
+        boolean javadocLookup = !"false".equals(ivySettings.getVariable("ivy.maven.lookup.javadoc"));
+        if (!sourcesLookup && !javadocLookup) {
+            Message.debug("Sources and javadocs lookup disabled");
+            return;
+        }
+
         ModuleDescriptor md = mdBuilder.getModuleDescriptor();
         ModuleRevisionId mrid = md.getModuleRevisionId();
         DependencyResolver resolver = ivySettings.getResolver(mrid);
@@ -328,30 +336,39 @@
             if (!ArtifactOrigin.isUnknown(mainArtifact)) {
                 String mainArtifactLocation = mainArtifact.getLocation();
 
-                ArtifactOrigin sourceArtifact = resolver.locate(mdBuilder.getSourceArtifact());
-                if (!ArtifactOrigin.isUnknown(sourceArtifact)
-                        && !sourceArtifact.getLocation().equals(mainArtifactLocation)) {
-                    Message.debug("source artifact found for " + mrid);
-                    mdBuilder.addSourceArtifact();
-                } else {
-                    // it seems that sometimes the 'src' classifier is used instead of 'sources'
-                    // Cfr. IVY-1138
-                    ArtifactOrigin srcArtifact = resolver.locate(mdBuilder.getSrcArtifact());
-                    if (!ArtifactOrigin.isUnknown(srcArtifact)
-                            && !srcArtifact.getLocation().equals(mainArtifactLocation)) {
+                if (sourcesLookup) {
+                    ArtifactOrigin sourceArtifact = resolver.locate(mdBuilder.getSourceArtifact());
+                    if (!ArtifactOrigin.isUnknown(sourceArtifact)
+                            && !sourceArtifact.getLocation().equals(mainArtifactLocation)) {
                         Message.debug("source artifact found for " + mrid);
-                        mdBuilder.addSrcArtifact();
+                        mdBuilder.addSourceArtifact();
                     } else {
-                        Message.debug("no source artifact found for " + mrid);
+                        // it seems that sometimes the 'src' classifier is used instead of 'sources'
+                        // Cfr. IVY-1138
+                        ArtifactOrigin srcArtifact = resolver.locate(mdBuilder.getSrcArtifact());
+                        if (!ArtifactOrigin.isUnknown(srcArtifact)
+                                && !srcArtifact.getLocation().equals(mainArtifactLocation)) {
+                            Message.debug("source artifact found for " + mrid);
+                            mdBuilder.addSrcArtifact();
+                        } else {
+                            Message.debug("no source artifact found for " + mrid);
+                        }
                     }
-                }
-                ArtifactOrigin javadocArtifact = resolver.locate(mdBuilder.getJavadocArtifact());
-                if (!ArtifactOrigin.isUnknown(javadocArtifact)
-                        && !javadocArtifact.getLocation().equals(mainArtifactLocation)) {
-                    Message.debug("javadoc artifact found for " + mrid);
-                    mdBuilder.addJavadocArtifact();
                 } else {
-                    Message.debug("no javadoc artifact found for " + mrid);
+                    Message.debug("sources lookup disabled");
+                }
+
+                if (javadocLookup) {
+                    ArtifactOrigin javadocArtifact = resolver.locate(mdBuilder.getJavadocArtifact());
+                    if (!ArtifactOrigin.isUnknown(javadocArtifact)
+                            && !javadocArtifact.getLocation().equals(mainArtifactLocation)) {
+                        Message.debug("javadoc artifact found for " + mrid);
+                        mdBuilder.addJavadocArtifact();
+                    } else {
+                        Message.debug("no javadoc artifact found for " + mrid);
+                    }
+                } else {
+                    Message.debug("javadocs lookup disabled");
                 }
             }
         }
diff --git a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
index ff0fa3c..6030c9f 100644
--- a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
+++ b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
@@ -603,5 +603,9 @@
             return AbstractResolver.this.getSettings().substitute(value);
         }
 
+        public String getVariable(String value) {
+            return AbstractResolver.this.getSettings().getVariable(value);
+        }
+
     }
 }
