Index: maven-project/src/test/java/org/apache/maven/project/DefaultMavenProjectHelperTest.java
===================================================================
--- maven-project/src/test/java/org/apache/maven/project/DefaultMavenProjectHelperTest.java	(revision 0)
+++ maven-project/src/test/java/org/apache/maven/project/DefaultMavenProjectHelperTest.java	(revision 0)
@@ -0,0 +1,154 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultMavenProjectHelperTest extends PlexusTestCase {
+	
+	private MavenProjectHelper projectHelper;
+	private MavenProject project;
+	private DistributionManagement distributionManagement;
+	private ArtifactRepositoryFactory repositoryFactory;
+	private File artifactFile;
+	private Artifact projectArtifact;
+	private DefaultRepositoryLayout layout;
+	
+	public void testAttachArtifactWithDistributionManagementSnapshot()
+		throws InvalidRepositoryException 
+	{
+		projectArtifact.setVersion("1.0-SNAPSHOT");
+		projectHelper.attachArtifact(project, distributionManagement, repositoryFactory, container, "jar", "jar", artifactFile);
+		
+		List attached = project.getAttachedArtifacts();
+		assertEquals(1, attached.size());
+		Artifact attachedArtifact = (Artifact)attached.get(0);
+		ArtifactRepository repository = attachedArtifact.getRepository();
+		assertNotNull(repository);
+		assertEquals("snapshot", repository.getId());
+	}
+	
+	public void testAttachArtifactWithDistributionManagementRelease()
+		throws InvalidRepositoryException
+	{
+		projectArtifact.setVersion("1.0");
+		projectHelper.attachArtifact(project, distributionManagement, repositoryFactory, container, "jar", "jar", artifactFile);
+		
+		List attached = project.getAttachedArtifacts();
+		assertEquals(1, attached.size());
+		Artifact attachedArtifact = (Artifact)attached.get(0);
+		ArtifactRepository repository = attachedArtifact.getRepository();
+		assertNotNull(repository);
+		assertEquals("release", repository.getId());
+	}
+	
+	public void testAttachArtifactArtifactRepositoryForSnapshotIsNull()
+		throws InvalidRepositoryException
+	{
+		ArtifactRepository snapshotRepository = new DefaultArtifactRepository("default-snapshot", "http://default-snapshot", layout);
+		projectArtifact.setVersion("1.0-SNAPSHOT");
+		projectArtifact.setRepository(snapshotRepository);
+		distributionManagement.setSnapshotRepository(null);
+		
+		assertNull(distributionManagement.getSnapshotRepository());
+		assertNotNull(distributionManagement.getRepository());
+		
+		projectHelper.attachArtifact(project, distributionManagement, repositoryFactory, container, "jar", "jar", artifactFile);
+		
+		List attached = project.getAttachedArtifacts();
+		assertEquals(1, attached.size());
+		Artifact attachedArtifact = (Artifact)attached.get(0);
+		ArtifactRepository repository = attachedArtifact.getRepository();
+		assertNotNull(repository);
+		assertEquals("default-snapshot", repository.getId());
+	}
+	
+	public void testAttachArtifactArtifactRepositoryForReleaseIsNull() 
+		throws InvalidRepositoryException
+	{
+		ArtifactRepository releaseRepository = new DefaultArtifactRepository("default-release", "http://default-release", layout);
+		projectArtifact.setVersion("1.0");
+		projectArtifact.setRepository(releaseRepository);
+		distributionManagement.setRepository(null);
+		
+		assertNull(distributionManagement.getRepository());
+		assertNotNull(distributionManagement.getSnapshotRepository());
+		
+		projectHelper.attachArtifact(project, distributionManagement, repositoryFactory, container, "jar", "jar", artifactFile);
+		
+		List attached = project.getAttachedArtifacts();
+		assertEquals(1, attached.size());
+		Artifact attachedArtifact = (Artifact)attached.get(0);
+		ArtifactRepository repository = attachedArtifact.getRepository();
+		assertNotNull(repository);
+		assertEquals("default-release", repository.getId());
+	}
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		DeploymentRepository snapshotDeploymentRepository = new DeploymentRepository();
+		snapshotDeploymentRepository.setId("snapshot");
+		snapshotDeploymentRepository.setName("Snapshot repo");
+		snapshotDeploymentRepository.setUrl("http://snapshots");
+		
+		DeploymentRepository releaseDeploymentRepository = new DeploymentRepository();
+		releaseDeploymentRepository.setId("release");
+		releaseDeploymentRepository.setName("Release repo");
+		releaseDeploymentRepository.setUrl("http://releases");
+		
+		distributionManagement = new DistributionManagement();
+		distributionManagement.setSnapshotRepository(snapshotDeploymentRepository);
+		distributionManagement.setRepository(releaseDeploymentRepository);
+		
+		VersionRange versionRange = VersionRange.createFromVersion("1.0");
+		projectArtifact = new DefaultArtifact("org.apache.teststuff", "pache-test-stuff", versionRange, 
+				"scope", "type", "classifier", new DefaultArtifactHandler());
+		
+		projectHelper = (MavenProjectHelper)lookup(DefaultMavenProjectHelper.ROLE);
+		project = new MavenProject();
+		project.setArtifact(projectArtifact);
+		project.setGroupId("org.apache.teststuff");
+		project.setArtifactId("apache-test-stuff");
+		
+		repositoryFactory = (ArtifactRepositoryFactory)lookup(ArtifactRepositoryFactory.ROLE);
+		artifactFile = new File("\\path\\to\\somewhere");
+		
+		layout = new DefaultRepositoryLayout();
+		
+		assertNotNull(repositoryFactory);
+		assertNotNull(projectHelper);
+		assertNotNull(project.getArtifact());
+	}
+}
Index: maven-project/src/test/java/org/apache/maven/project/artifact/ArtifactHandlerMock.java
===================================================================
--- maven-project/src/test/java/org/apache/maven/project/artifact/ArtifactHandlerMock.java	(revision 0)
+++ maven-project/src/test/java/org/apache/maven/project/artifact/ArtifactHandlerMock.java	(revision 0)
@@ -0,0 +1,102 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+
+public class ArtifactHandlerMock
+    implements ArtifactHandler
+{
+
+    private String extension, directory, classifier, packaging, language;
+
+    private boolean includesDependencies, addedToClasspath;
+
+    public void setExtension( String extension )
+    {
+        this.extension = extension;
+    }
+
+    public String getExtension()
+    {
+        return extension;
+    }
+
+    public void setDirectory( String directory )
+    {
+        this.directory = directory;
+    }
+
+    public String getDirectory()
+    {
+        return directory;
+    }
+
+    public void setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+    }
+
+    public String getClassifier()
+    {
+        return classifier;
+    }
+
+    public void setPackaging( String packaging )
+    {
+        this.packaging = packaging;
+    }
+
+    public String getPackaging()
+    {
+        return packaging;
+    }
+
+    public void setIncludesDependencies( boolean includesDependencies )
+    {
+        this.includesDependencies = includesDependencies;
+    }
+
+    public boolean isIncludesDependencies()
+    {
+        return includesDependencies;
+    }
+
+    public void setLanguage( String language )
+    {
+        this.language = language;
+    }
+
+    public String getLanguage()
+    {
+        return language;
+    }
+
+    public void setAddedToClasspath( boolean addedToClasspath )
+    {
+        this.addedToClasspath = addedToClasspath;
+    }
+
+    public boolean isAddedToClasspath()
+    {
+        return addedToClasspath;
+    }
+
+}
Index: maven-project/src/test/java/org/apache/maven/project/artifact/AttachedArtifactTest.java
===================================================================
--- maven-project/src/test/java/org/apache/maven/project/artifact/AttachedArtifactTest.java	(revision 0)
+++ maven-project/src/test/java/org/apache/maven/project/artifact/AttachedArtifactTest.java	(revision 0)
@@ -0,0 +1,52 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.project.artifact.AttachedArtifact;
+
+import junit.framework.TestCase;
+
+public class AttachedArtifactTest
+	extends TestCase
+{
+	public void testGetArtifactRepository() {
+		VersionRange versionRange = VersionRange.createFromVersion("1.0");		
+		ArtifactHandlerMock artifactHandler = new ArtifactHandlerMock();
+		
+		ArtifactRepository oldArtifactRepo = new DefaultArtifactRepository("old", "http://old", new DefaultRepositoryLayout());
+		ArtifactRepository newArtifactRepo = new DefaultArtifactRepository("new", "http://new", new DefaultRepositoryLayout());
+		
+		Artifact projectArtifact = new DefaultArtifact("org.apache.test.something", "apache-test-something", 
+				versionRange, "scope", "type", "classifier", artifactHandler);
+		projectArtifact.setRepository(oldArtifactRepo);
+		
+		Artifact artifact = new AttachedArtifact(projectArtifact, "jar", artifactHandler);
+		assertEquals(oldArtifactRepo, artifact.getRepository());
+		
+		artifact.setRepository(newArtifactRepo);
+		assertEquals(newArtifactRepo, artifact.getRepository());
+	}
+}
Index: maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
===================================================================
--- maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java	(revision 566423)
+++ maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java	(working copy)
@@ -20,10 +20,17 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Resource;
+import org.apache.maven.project.ProjectUtils;
 import org.apache.maven.project.artifact.AttachedArtifact;
+import org.codehaus.plexus.PlexusContainer;
 
 import java.io.File;
 import java.util.List;
@@ -33,29 +40,20 @@
 {
     
     private ArtifactHandlerManager artifactHandlerManager;
+    
+    public void attachArtifact( MavenProject project, DistributionManagement distributionManagement,
+    		ArtifactRepositoryFactory repositoryFactory, PlexusContainer container, String artifactType, String artifactClassifier, File artifactFile )
+    		throws InvalidRepositoryException
+    {
+    	Artifact artifact = createAttachedArtifact( project, artifactType, artifactClassifier, artifactFile);
+        project.addAttachedArtifact( artifact );
+        setArtifactRepositoryFromDistributionManagement(artifact, distributionManagement, repositoryFactory, container);
+    }
 
     public void attachArtifact( MavenProject project, String artifactType, String artifactClassifier, File artifactFile )
     {
-        String type = artifactType;
-        
-        ArtifactHandler handler = null;
-        
-        if ( type != null )
-        {
-            handler = artifactHandlerManager.getArtifactHandler( artifactType );
-        }
-        
-        if ( handler == null )
-        {
-            handler = artifactHandlerManager.getArtifactHandler( "jar" );
-        }
-
-        Artifact artifact = new AttachedArtifact( project.getArtifact(), artifactType, artifactClassifier, handler );
-        
-        artifact.setFile( artifactFile );
-        artifact.setResolved( true );
-        
-        project.addAttachedArtifact( artifact );
+    	Artifact artifact = createAttachedArtifact( project, artifactType, artifactClassifier, artifactFile);
+    	project.addAttachedArtifact( artifact );
     }
 
     public void attachArtifact( MavenProject project, String artifactType, File artifactFile )
@@ -101,5 +99,41 @@
 
         project.addTestResource( resource );
     }
+    
+    Artifact createAttachedArtifact( MavenProject project, String artifactType, String artifactClassifier, File artifactFile ) 
+    {
+        String type = artifactType;
+        
+        ArtifactHandler handler = null;
+        
+        if ( type != null )
+        {
+            handler = artifactHandlerManager.getArtifactHandler( artifactType );
+        }
+        
+        if ( handler == null )
+        {
+            handler = artifactHandlerManager.getArtifactHandler( "jar" );
+        }
 
+        Artifact artifact = new AttachedArtifact( project.getArtifact(), artifactType, artifactClassifier, handler );
+        
+        artifact.setFile( artifactFile );
+        artifact.setResolved( true );
+        return artifact;
+    }
+    
+    void setArtifactRepositoryFromDistributionManagement(Artifact attachedArtifact, DistributionManagement distributionManagement,
+    		ArtifactRepositoryFactory repositoryFactory, PlexusContainer container)
+    	throws InvalidRepositoryException
+    {
+    	DeploymentRepository deploymentRepoForAttachedArtifact = null;
+    	if (attachedArtifact.isSnapshot()) {
+    		deploymentRepoForAttachedArtifact = distributionManagement.getSnapshotRepository();
+    	} else {
+    		deploymentRepoForAttachedArtifact = distributionManagement.getRepository();
+    	}
+		ArtifactRepository artifactRepo = ProjectUtils.buildDeploymentArtifactRepository(deploymentRepoForAttachedArtifact, repositoryFactory, container);
+		attachedArtifact.setRepository(artifactRepo);
+    }
 }
Index: maven-project/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java
===================================================================
--- maven-project/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java	(revision 566423)
+++ maven-project/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java	(working copy)
@@ -36,6 +36,7 @@
 {
 
     private final Artifact parent;
+    private ArtifactRepository artifactRepository;
 
     public AttachedArtifact( Artifact parent, String type, String classifier, ArtifactHandler artifactHandler )
     {        
@@ -99,12 +100,16 @@
 
     public ArtifactRepository getRepository()
     {
-        return parent.getRepository();
+    	if (artifactRepository == null) {
+    		return parent.getRepository();
+    	} else {
+    		return artifactRepository;
+    	}
     }
     
     public void setRepository( ArtifactRepository repository )
     {
-        throw new UnsupportedOperationException( "Cannot change the repository information for an attached artifact. It is derived from the main artifact." );
+    	artifactRepository = repository;
     }
 
     public String getScope()
Index: maven-project/src/main/java/org/apache/maven/project/MavenProjectHelper.java
===================================================================
--- maven-project/src/main/java/org/apache/maven/project/MavenProjectHelper.java	(revision 566423)
+++ maven-project/src/main/java/org/apache/maven/project/MavenProjectHelper.java	(working copy)
@@ -19,11 +19,15 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.DistributionManagement;
+import org.codehaus.plexus.PlexusContainer;
 import java.io.File;
 import java.util.List;
 
 public interface MavenProjectHelper
-{    
+{
     String ROLE = MavenProjectHelper.class.getName();
 
     void attachArtifact( MavenProject project, File artifactFile, String artifactClassifier );
@@ -32,8 +36,11 @@
     
     void attachArtifact( MavenProject project, String artifactType, String artifactClassifier, File artifactFile );
     
+    void attachArtifact( MavenProject project, DistributionManagement distributionManagement,
+    		ArtifactRepositoryFactory repositoryFactory, PlexusContainer container, String artifactType, String artifactClassifier, File artifactFile )
+    	throws InvalidRepositoryException;
+    
     void addResource( MavenProject project, String resourceDirectory, List includes, List excludes );
     
     void addTestResource( MavenProject project, String resourceDirectory, List includes, List excludes );
-    
 }

