diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 697ca77..9cc9960 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -63,6 +63,7 @@
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.MissingProjectException;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.MavenMetadataSource;
 import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
@@ -107,6 +108,8 @@
     protected ErrorDiagnostics errorDiagnostics;
 
     protected RuntimeInformation runtimeInformation;
+    
+    protected MavenMetadataSource mavenMetadataSource;
 
     private static final long MB = 1024 * 1024;
 
@@ -267,6 +270,9 @@
         globalProfileManager.loadSettingsProfiles( request.getSettings() );
 
         getLogger().info( "Scanning for projects..." );
+        
+        request.getProjectBuilderConfiguration()
+               .setMetadataSource( new MavenMetadataSource( mavenMetadataSource, request.getProjectBuilderConfiguration() ) );
 
         boolean foundProjects = true;
         List projects = getProjects( request );
@@ -616,9 +622,7 @@
     protected MavenSession createSession( MavenExecutionRequest request,
                                           ReactorManager rpm )
     {
-        return new MavenSession( container, request.getSettings(), request.getLocalRepository(),
-                                 request.getEventDispatcher(), rpm, request.getGoals(), request.getBaseDirectory(),
-                                 request.getExecutionProperties(), request.getUserProperties(), request.getStartTime() );
+        return new MavenSession( container, request, rpm );
     }
 
     /**
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
index 6360e79..bb63976 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
@@ -25,6 +25,7 @@
 import org.apache.maven.project.DefaultProjectBuilderConfiguration;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuilderConfiguration;
+import org.apache.maven.project.artifact.MavenMetadataSource;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -44,7 +45,7 @@
 
     private ArtifactRepository localRepository;
 
-    private List goals;
+    private List<String> goals;
 
     private EventDispatcher eventDispatcher;
 
@@ -65,15 +66,17 @@
 
     private MavenProject currentProject;
 
+    private ProjectBuilderConfiguration projectBuilderConfig;
+
     public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
-                         EventDispatcher eventDispatcher, ReactorManager reactorManager, List goals,
+                         EventDispatcher eventDispatcher, ReactorManager reactorManager, List<String> goals,
                          String executionRootDir, Properties executionProperties, Date startTime )
     {
         this( container, settings, localRepository, eventDispatcher, reactorManager, goals, executionRootDir, executionProperties, null, startTime );
     }
 
     public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
-                         EventDispatcher eventDispatcher, ReactorManager reactorManager, List goals,
+                         EventDispatcher eventDispatcher, ReactorManager reactorManager, List<String> goals,
                          String executionRootDir, Properties executionProperties, Properties userProperties, Date startTime )
     {
         this.container = container;
@@ -97,6 +100,21 @@
         this.startTime = startTime;
     }
 
+    public MavenSession( PlexusContainer container, MavenExecutionRequest request, ReactorManager rpm )
+    {
+        this.container = container;
+        this.settings = request.getSettings();
+        this.localRepository = request.getLocalRepository();
+        this.eventDispatcher = request.getEventDispatcher();
+        this.reactorManager = rpm;
+        this.goals = request.getGoals();
+        this.executionRootDir = request.getBaseDirectory();
+        this.executionProperties = request.getExecutionProperties();
+        this.userProperties = request.getUserProperties();
+        this.startTime = request.getStartTime();
+        this.projectBuilderConfig = request.getProjectBuilderConfiguration();
+    }
+    
     public Map getPluginContext( PluginDescriptor pluginDescriptor, MavenProject project )
     {
         return reactorManager.getPluginContext( pluginDescriptor, project );
@@ -112,7 +130,7 @@
         return localRepository;
     }
 
-    public List getGoals()
+    public List<String> getGoals()
     {
         return goals;
     }
@@ -138,13 +156,13 @@
         return container.lookup( role, roleHint );
     }
 
-    public List lookupList( String role )
+    public List<?> lookupList( String role )
         throws ComponentLookupException
     {
         return container.lookupList( role );
     }
 
-    public Map lookupMap( String role )
+    public Map<String, ?> lookupMap( String role )
         throws ComponentLookupException
     {
         return container.lookupMap( role );
@@ -209,18 +227,19 @@
         this.userProperties = userProperties;
     }
 
-    /**
-     * NOTE: This varies from {@link DefaultMavenExecutionRequest#getProjectBuilderConfiguration()} in that
-     * it doesn't supply a global profile manager.
-     */
     public ProjectBuilderConfiguration getProjectBuilderConfiguration()
     {
-        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
-        config.setLocalRepository( getLocalRepository() )
-              .setExecutionProperties( getExecutionProperties() )
-              .setUserProperties( getUserProperties() )
-              .setBuildStartTime( getStartTime() );
+        if ( projectBuilderConfig == null )
+        {
+            ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
+            config.setLocalRepository( getLocalRepository() )
+                  .setExecutionProperties( getExecutionProperties() )
+                  .setUserProperties( getUserProperties() )
+                  .setBuildStartTime( getStartTime() );
+            
+            this.projectBuilderConfig = config;
+        }
 
-        return config;
+        return projectBuilderConfig;
     }
 }
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
index 9949513..b0bd04c 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
@@ -21,7 +21,7 @@
 
 import static org.apache.maven.container.ContainerUtils.findChildComponentHints;
 
-import org.apache.maven.MavenArtifactFilterManager; 
+import org.apache.maven.MavenArtifactFilterManager;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
@@ -38,7 +38,9 @@
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.model.Extension;
 import org.apache.maven.plugin.DefaultPluginManager;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.wagon.Wagon;
 import org.codehaus.classworlds.ClassRealm;
 import org.codehaus.classworlds.ClassWorld;
@@ -61,7 +63,6 @@
 import java.io.InputStreamReader;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
@@ -99,6 +100,14 @@
                               ArtifactRepository localRepository )
         throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException
     {
+        addExtension( extension, project, new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ) );
+    }
+    
+    public void addExtension( Extension extension,
+                              MavenProject project,
+                              ProjectBuilderConfiguration builderConfig )
+        throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException
+    {
         String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
 
         getLogger().debug( "Initialising extension: " + extensionId );
@@ -108,11 +117,17 @@
         if ( artifact != null )
         {
             ArtifactFilter filter = new ProjectArtifactExceptionFilter( artifactFilter, project.getArtifact() );
+            
+            ArtifactMetadataSource metadataSource = builderConfig.getMetadataSource();
+            if ( metadataSource == null )
+            {
+                metadataSource = artifactMetadataSource;
+            }
 
             ResolutionGroup resolutionGroup;
             try
             {
-                resolutionGroup = artifactMetadataSource.retrieve( artifact, localRepository,
+                resolutionGroup = metadataSource.retrieve( artifact, builderConfig.getLocalRepository(),
                                                                    project.getRemoteArtifactRepositories() );
             }
             catch ( ArtifactMetadataRetrievalException e )
@@ -123,10 +138,10 @@
 
             // We use the same hack here to make sure that plexus 1.1 is available for extensions that do
             // not declare plexus-utils but need it. MNG-2900
-            Set rgArtifacts = resolutionGroup.getArtifacts();
+            Set<Artifact> rgArtifacts = resolutionGroup.getArtifacts();
             rgArtifacts = DefaultPluginManager.checkPlexusUtils( rgArtifacts, artifactFactory );
 
-            Set dependencies = new LinkedHashSet();
+            Set<Artifact> dependencies = new LinkedHashSet<Artifact>();
             dependencies.add( artifact );
             dependencies.addAll( rgArtifacts );
 
@@ -136,16 +151,16 @@
             ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, project.getArtifact(),
                                                                                     Collections.EMPTY_MAP,
                                                                                     //project.getManagedVersionMap(),
-                                                                                    localRepository,
+                                                                                    builderConfig.getLocalRepository(),
                                                                                     project.getRemoteArtifactRepositories(),
-                                                                                    artifactMetadataSource, filter );
+                                                                                    metadataSource, filter );
 
             // gross hack for some backwards compat (MNG-2749)
             // if it is a lone artifact, then we assume it to be a resource package, and put it in the main container
             // as before. If it has dependencies, that's when we risk conflict and exile to the child container
             // jvz: we have to make this 2 because plexus is always added now.
 
-            Set artifacts = result.getArtifacts();
+            Set<Artifact> artifacts = result.getArtifacts();
 
             // Lifecycles are loaded by the Lifecycle executor by looking up lifecycle definitions from the
             // core container. So we need to look if an extension has a lifecycle mapping and use the container
@@ -153,10 +168,8 @@
 
             if ( extensionContainsLifeycle( artifact.getFile() ) )
             {
-                for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+                for ( Artifact a : artifacts )
                 {
-                    Artifact a = (Artifact) i.next();
-
                     if ( artifactFilter.include( a ) )
                     {
                         getLogger().debug( "Adding extension to core container: " + a.getFile() );
@@ -167,10 +180,8 @@
             }
             else if ( artifacts.size() == 2 )
             {
-                for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+                for ( Artifact a : artifacts )
                 {
-                    Artifact a = (Artifact) i.next();
-
                     if ( !a.getArtifactId().equals( "plexus-utils" ) )
                     {
                         a = project.replaceWithActiveArtifact( a );
@@ -191,10 +202,8 @@
                     extensionContainer = createContainer();
                 }
 
-                for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
+                for ( Artifact a : (Set<Artifact>) result.getArtifacts() )
                 {
-                    Artifact a = (Artifact) i.next();
-
                     a = project.replaceWithActiveArtifact( a );
 
                     getLogger().debug( "Adding to extension classpath: " + a.getFile() );
diff --git a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
index 4667a90..61b1b59 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
@@ -25,6 +25,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.model.Extension;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.codehaus.plexus.PlexusContainerException;
 
 import java.util.Map;
@@ -43,4 +44,7 @@
     void registerWagons();
 
     Map<String, ArtifactHandler> getArtifactTypeHandlers();
+
+    void addExtension( Extension extension, MavenProject project, ProjectBuilderConfiguration builderConfig )
+        throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException;
 }
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index 024b3b7..d9b13eb 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -193,7 +193,7 @@
                 try
                 {
                     getLogger().debug( "Adding extension: " + extension );
-                    extensionManager.addExtension( extension, project, session.getLocalRepository() );
+                    extensionManager.addExtension( extension, project, session.getProjectBuilderConfiguration() );
                 }
                 catch ( PlexusContainerException e )
                 {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
index 696b607..a11e02a 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
@@ -740,10 +740,16 @@
 
             ArtifactRepository localRepository = session.getLocalRepository();
 
+            ArtifactMetadataSource metadataSource = session.getProjectBuilderConfiguration().getMetadataSource();
+            if ( metadataSource == null )
+            {
+                 metadataSource = artifactMetadataSource;
+            }
+            
             ResolutionGroup resolutionGroup;
             try
             {
-                resolutionGroup = artifactMetadataSource.retrieve( pluginArtifact, localRepository,
+                resolutionGroup = metadataSource.retrieve( pluginArtifact, localRepository,
                                                                    project.getPluginArtifactRepositories() );
             }
             catch ( ArtifactMetadataRetrievalException e )
@@ -835,7 +841,7 @@
             ArtifactResolutionResult result = artifactResolver.resolveTransitively( dependencies, pluginArtifact,
                                                                                     pluginManagedDependencies,
                                                                                     localRepository, repositories,
-                                                                                    artifactMetadataSource,
+                                                                                    metadataSource,
                                                                                     artifactFilter );
 
             Set resolved = result.getArtifacts();
diff --git a/maven-core/src/main/resources/META-INF/plexus/components.xml b/maven-core/src/main/resources/META-INF/plexus/components.xml
index 2bd2d63..a3ab50c 100644
--- a/maven-core/src/main/resources/META-INF/plexus/components.xml
+++ b/maven-core/src/main/resources/META-INF/plexus/components.xml
@@ -108,6 +108,11 @@
         <requirement>
           <role>org.apache.maven.execution.RuntimeInformation</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role>
+          <role-hint>maven</role-hint>
+          <field-name>mavenMetadataSource</field-name>
+        </requirement>
       </requirements>
     </component>
 
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 878b33b..c8f24e3 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -239,6 +239,17 @@
                                              boolean allowStubModel )
         throws ProjectBuildingException
     {
+        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+        
+        return buildFromRepository( artifact, remoteArtifactRepositories, config, allowStubModel );
+    }
+
+    public MavenProject buildFromRepository( Artifact artifact,
+                                             List remoteArtifactRepositories,
+                                             ProjectBuilderConfiguration config,
+                                             boolean allowStubModel )
+        throws ProjectBuildingException
+    {
         String cacheKey = createCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
 
         MavenProject project = (MavenProject) processedProjectCache.get( cacheKey );
@@ -248,9 +259,7 @@
             return project;
         }
 
-        Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository, allowStubModel );
-
-        ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+        Model model = findModelFromRepository( artifact, remoteArtifactRepositories, config, allowStubModel );
 
         return buildInternal( "Artifact [" + artifact + "]", model, config, remoteArtifactRepositories,
                               null, false );
@@ -526,7 +535,7 @@
 
     private Model findModelFromRepository( Artifact artifact,
                                            List remoteArtifactRepositories,
-                                           ArtifactRepository localRepository,
+                                           ProjectBuilderConfiguration config,
                                            boolean allowStubModel )
         throws ProjectBuildingException
     {
@@ -555,7 +564,7 @@
 
         try
         {
-            artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
+            artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, config.getLocalRepository() );
 
             File file = projectArtifact.getFile();
 
@@ -574,7 +583,7 @@
                 status = ArtifactStatus.valueOf( distributionManagement.getStatus() );
             }
 
-            checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, localRepository );
+            checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, config.getLocalRepository() );
 
             // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
             // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
@@ -859,6 +868,7 @@
 
         // only add the super repository if it wasn't overridden by a profile or project
         List repositories = new ArrayList( aggregatedRemoteWagonRepositories );
+        repositories.addAll( parentSearchRepositories );
 
         List superRepositories = buildArtifactRepositories( superModel );
 
@@ -996,7 +1006,7 @@
         // MNG-3482: Make sure depMgmt is interpolated before merging.
         if ( !isSuperPom )
         {
-            mergeManagedDependencies( model, config.getLocalRepository(), remoteRepositories );
+            mergeManagedDependencies( model, config, remoteRepositories );
         }
 
         // interpolation is before injection, because interpolation is off-limits in the injected variables
@@ -1389,7 +1399,7 @@
 
                 try
                 {
-                    model = findModelFromRepository( parentArtifact, remoteRepositories, config.getLocalRepository(), false );
+                    model = findModelFromRepository( parentArtifact, remoteRepositories, config, false );
                 }
                 catch ( ProjectBuildingException e )
                 {
@@ -1422,7 +1432,7 @@
         return project;
     }
 
-    private void mergeManagedDependencies(Model model, ArtifactRepository localRepository, List parentSearchRepositories)
+    private void mergeManagedDependencies(Model model, ProjectBuilderConfiguration config, List parentSearchRepositories)
         throws ProjectBuildingException
     {
         DependencyManagement modelDepMgmt = model.getDependencyManagement();
@@ -1453,7 +1463,7 @@
                     {
                         Artifact artifact = artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
                                                                                   dep.getVersion(), dep.getScope() );
-                        MavenProject project = buildFromRepository(artifact, parentSearchRepositories, localRepository, false);
+                        MavenProject project = buildFromRepository(artifact, parentSearchRepositories, config, false);
 
                         DependencyManagement depMgmt = project.getDependencyManagement();
 
diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java b/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
index 77fb4b7..6940b01 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
@@ -1,5 +1,6 @@
 package org.apache.maven.project;
 
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.profiles.ProfileManager;
 
@@ -20,6 +21,8 @@
 
     private Date buildStartTime;
 
+    private ArtifactMetadataSource metadataSource;
+
     public DefaultProjectBuilderConfiguration()
     {
     }
@@ -84,4 +87,15 @@
         return this;
     }
 
+    public ProjectBuilderConfiguration setMetadataSource( ArtifactMetadataSource metadataSource )
+    {
+        this.metadataSource = metadataSource;
+        return this;
+    }
+    
+    public ArtifactMetadataSource getMetadataSource()
+    {
+        return metadataSource;
+    }
+
 }
diff --git a/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
index e398ae9..bb29b17 100644
--- a/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
@@ -91,6 +91,22 @@
         throws ProjectBuildingException;
 
     /**
+     * Build the artifact using the local repository and profile manager from the project-builder 
+     * configuration, resolving it if necessary.
+     *
+     * @param artifact the artifact description
+     * @param configuration The {@link ProjectBuilderConfiguration} instance containing local 
+     *                      repository, profile manager, etc.
+     * @param remoteArtifactRepositories the remote repository list
+     * @param allowStubModel return a stub if the POM is not found
+     * @return the built project
+     * @throws ProjectBuildingException
+     */
+    MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories,
+                                      ProjectBuilderConfiguration configuration, boolean allowStubModel )
+        throws ProjectBuildingException;
+
+    /**
      * @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
      */
     MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
diff --git a/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java b/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
index f8ce413..f190ad7 100644
--- a/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
+++ b/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
@@ -1,5 +1,6 @@
 package org.apache.maven.project;
 
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.profiles.ProfileManager;
 
@@ -29,4 +30,8 @@
 
     ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime );
 
+    ProjectBuilderConfiguration setMetadataSource( ArtifactMetadataSource mms );
+    
+    ArtifactMetadataSource getMetadataSource();
+
 }
diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index f765795..4ab0f07 100644
--- a/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -53,6 +53,7 @@
 import org.apache.maven.project.InvalidProjectModelException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.validation.ModelValidationResult;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -78,8 +79,29 @@
     // lazily instantiated and cached.
     private MavenProject superProject;
     
-    private Set warnedPoms = new HashSet();
-
+    // cache
+    private final Set<String> warnedPoms;
+    
+    // per-session information
+    private ProjectBuilderConfiguration projectBuilderConfig;
+    
+    public MavenMetadataSource()
+    {
+        warnedPoms = new HashSet<String>();
+    }
+    
+    public MavenMetadataSource( MavenMetadataSource mms, ProjectBuilderConfiguration configuration )
+    {
+        mavenProjectBuilder = mms.mavenProjectBuilder;
+        artifactFactory = mms.artifactFactory;
+        repositoryMetadataManager = mms.repositoryMetadataManager;
+        superProject = mms.superProject;
+        warnedPoms = mms.warnedPoms;
+        
+        projectBuilderConfig = configuration;
+        projectBuilderConfig.setMetadataSource( this );
+    }
+    
     /**
      * Resolve all relocations in the POM for this artifact, and return the new artifact coordinate.
      */
@@ -143,6 +165,12 @@
         throws ArtifactMetadataRetrievalException
     {
         MavenProject project = null;
+        
+        ProjectBuilderConfiguration config = projectBuilderConfig;
+        if ( config == null )
+        {
+            config = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
+        }
 
         Artifact pomArtifact;
         boolean done = false;
@@ -160,7 +188,7 @@
             {
                 try
                 {
-                    project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, localRepository,
+                    project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, config,
                                                                        true );
                 }
                 catch ( InvalidProjectModelException e )
@@ -352,11 +380,17 @@
     private List aggregateRepositoryLists( List remoteRepositories, List remoteArtifactRepositories )
         throws ArtifactMetadataRetrievalException
     {
+        ProjectBuilderConfiguration config = projectBuilderConfig;
+        if ( config == null )
+        {
+            config = new DefaultProjectBuilderConfiguration();
+        }
+        
         if ( superProject == null )
         {
             try
             {
-                superProject = mavenProjectBuilder.buildStandaloneSuperProject( new DefaultProjectBuilderConfiguration() );
+                superProject = mavenProjectBuilder.buildStandaloneSuperProject( config );
             }
             catch ( ProjectBuildingException e )
             {
