Index: src/test/java/org/apache/maven/plugin/source/AbstractSourcePluginTestCase.java
===================================================================
--- src/test/java/org/apache/maven/plugin/source/AbstractSourcePluginTestCase.java	(revision 565589)
+++ src/test/java/org/apache/maven/plugin/source/AbstractSourcePluginTestCase.java	(working copy)
@@ -55,7 +55,7 @@
     protected final String FINAL_NAME_SUFFIX = "-99.0";
 
     protected abstract String getGoal();
-
+    
     /**
      * Execute the souce plugin for the specified project.
      *
Index: src/test/java/org/apache/maven/plugin/source/SourceJarMojoTest.java
===================================================================
--- src/test/java/org/apache/maven/plugin/source/SourceJarMojoTest.java	(revision 565589)
+++ src/test/java/org/apache/maven/plugin/source/SourceJarMojoTest.java	(working copy)
@@ -20,8 +20,20 @@
  */
 
 import java.io.File;
+import java.util.List;
 import java.util.Properties;
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.project.MavenProject;
+
 /**
  * @author <a href="mailto:oching@exist.com">Maria Odea Ching</a>
  */
@@ -33,15 +45,81 @@
     {
         return "jar";
     }
-
+    
     public void testDefaultConfiguration()
         throws Exception
     {
         doTestProjectWithSourceArchive( "project-001", new String[]{"default-configuration.properties",
             "foo/project001/App.java", "foo/project001/", "foo/", "META-INF/MANIFEST.MF", "META-INF/"} );
     }
+    
+    public void testArtifactRepositoryIsSetWhenDistributionManagementIsProvided()
+    	throws Exception
+    {
+        File testPom = new File( getBasedir(), getTestDir( "project-001" ) + "/pom.xml" );
+        AbstractSourceJarMojo mojo = (AbstractSourceJarMojo) lookupMojo( getGoal(), testPom );
+        MavenProject project = (MavenProject)getVariableValueFromObject(mojo, "project");
+        
+        DeploymentRepository repository = new DeploymentRepository();
+        repository.setId("repo");
+        repository.setUrl("http://url/to/repo");
+        repository.setName("Repo");
+        
+        DistributionManagement distributionManagement = new DistributionManagement();
+        distributionManagement.setRepository(repository);
+        distributionManagement.setSnapshotRepository(repository);
+        
+        setVariableValueToObject(mojo, "attach", Boolean.TRUE);
+        setVariableValueToObject(mojo, "distributionManagement", distributionManagement);
+        
+        ArtifactHandler handler = new DefaultArtifactHandler();
+        
+        VersionRange range = VersionRange.createFromVersion(project.getVersion());
+        Artifact parentArtifact = new DefaultArtifact(project.getGroupId(), project.getArtifactId(), 
+        		range, "scope", "jar", null, handler);
+        
+        project.setArtifact(parentArtifact);
+        
+        mojo.execute();
+        
+        List artifacts =  project.getAttachedArtifacts();
+        assertNotNull(artifacts);
+        assertEquals(1, artifacts.size());
+        
+        Artifact attachedArtifact = (Artifact)artifacts.get(0);
+        ArtifactRepository artifactRepo = attachedArtifact.getRepository();
+        assertNotNull(artifactRepo);
+        assertEquals("repo", artifactRepo.getId());
+    }
+    
+    public void testArtifactRepositoryIsSetWhenDistributionManagementIsNotProvided()
+	throws Exception
+	{
+        File testPom = new File( getBasedir(), getTestDir( "project-001" ) + "/pom.xml" );
+        AbstractSourceJarMojo mojo = (AbstractSourceJarMojo) lookupMojo( getGoal(), testPom );
+        MavenProject project = (MavenProject)getVariableValueFromObject(mojo, "project");
+        
+        setVariableValueToObject(mojo, "attach", Boolean.TRUE);
+        
+        ArtifactHandler handler = new DefaultArtifactHandler();
+        
+        VersionRange range = VersionRange.createFromVersion(project.getVersion());
+        Artifact parentArtifact = new DefaultArtifact(project.getGroupId(), project.getArtifactId(), 
+        		range, "scope", "jar", null, handler);
+        
+        project.setArtifact(parentArtifact);
+        
+        mojo.execute();
+        
+        List artifacts =  project.getAttachedArtifacts();
+        assertNotNull(artifacts);
+        assertEquals(1, artifacts.size());
+        
+        Artifact attachedArtifact = (Artifact)artifacts.get(0);
+        ArtifactRepository artifactRepo = attachedArtifact.getRepository();
+        assertNull(artifactRepo);
+	}
 
-
     public void testExcludes()
         throws Exception
     {
@@ -70,6 +148,4 @@
 
         } );
     }
-
-
 }
Index: src/test/java/org/apache/maven/plugin/source/TestSourceJarMojoTest.java
===================================================================
--- src/test/java/org/apache/maven/plugin/source/TestSourceJarMojoTest.java	(revision 565589)
+++ src/test/java/org/apache/maven/plugin/source/TestSourceJarMojoTest.java	(working copy)
@@ -20,7 +20,18 @@
  */
 
 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.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.project.MavenProject;
+
 /**
  * @author <a href="mailto:oching@exist.com">Maria Odea Ching</a>
  */
@@ -33,6 +44,72 @@
         return "test-jar";
     }
 
+    public void testArtifactRepositoryIsSetWhenDistributionManagementIsProvided()
+	throws Exception
+	{
+	    File testPom = new File( getBasedir(), getTestDir( "project-001" ) + "/pom.xml" );
+	    AbstractSourceJarMojo mojo = (AbstractSourceJarMojo) lookupMojo( getGoal(), testPom );
+	    MavenProject project = (MavenProject)getVariableValueFromObject(mojo, "project");
+	    
+	    DeploymentRepository repository = new DeploymentRepository();
+	    repository.setId("repo");
+	    repository.setUrl("http://url/to/repo");
+	    repository.setName("Repo");
+	    
+	    DistributionManagement distributionManagement = new DistributionManagement();
+	    distributionManagement.setRepository(repository);
+	    distributionManagement.setSnapshotRepository(repository);
+	    
+	    setVariableValueToObject(mojo, "attach", Boolean.TRUE);
+	    setVariableValueToObject(mojo, "distributionManagement", distributionManagement);
+	    
+	    ArtifactHandler handler = new DefaultArtifactHandler();
+	    
+	    VersionRange range = VersionRange.createFromVersion(project.getVersion());
+	    Artifact parentArtifact = new DefaultArtifact(project.getGroupId(), project.getArtifactId(), 
+	    		range, "scope", "jar", null, handler);
+	    
+	    project.setArtifact(parentArtifact);
+	    
+	    mojo.execute();
+	    
+	    List artifacts =  project.getAttachedArtifacts();
+	    assertNotNull(artifacts);
+	    assertEquals(1, artifacts.size());
+	    
+	    Artifact attachedArtifact = (Artifact)artifacts.get(0);
+	    ArtifactRepository artifactRepo = attachedArtifact.getRepository();
+	    assertNotNull(artifactRepo);
+	    assertEquals("repo", artifactRepo.getId());
+	}
+    
+    public void testArtifactRepositoryIsSetWhenDistributionManagementIsNotProvided()
+	throws Exception
+	{
+        File testPom = new File( getBasedir(), getTestDir( "project-001" ) + "/pom.xml" );
+        AbstractSourceJarMojo mojo = (AbstractSourceJarMojo) lookupMojo( getGoal(), testPom );
+        MavenProject project = (MavenProject)getVariableValueFromObject(mojo, "project");
+        
+        setVariableValueToObject(mojo, "attach", Boolean.TRUE);
+        
+        ArtifactHandler handler = new DefaultArtifactHandler();
+        
+        VersionRange range = VersionRange.createFromVersion(project.getVersion());
+        Artifact parentArtifact = new DefaultArtifact(project.getGroupId(), project.getArtifactId(), 
+        		range, "scope", "jar", null, handler);
+        
+        project.setArtifact(parentArtifact);
+        
+        mojo.execute();
+        
+        List artifacts =  project.getAttachedArtifacts();
+        assertNotNull(artifacts);
+        assertEquals(1, artifacts.size());
+        
+        Artifact attachedArtifact = (Artifact)artifacts.get(0);
+        ArtifactRepository artifactRepo = attachedArtifact.getRepository();
+        assertNull(artifactRepo);
+	}
 
     public void testDefaultConfiguration()
         throws Exception
@@ -64,5 +141,4 @@
         assertFalse( "Test source archive should not have been created[" + expectedFile.getAbsolutePath() + "]",
                      expectedFile.exists() );
     }
-
 }
Index: src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java
===================================================================
--- src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java	(revision 565589)
+++ src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java	(working copy)
@@ -19,14 +19,22 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
@@ -36,11 +44,17 @@
 import java.util.List;
 
 public abstract class AbstractSourceJarMojo
-    extends AbstractMojo
+	extends AbstractMojo
+	implements Contextualizable
 {
     private static final String[] DEFAULT_INCLUDES = new String[]{"**/*",};
 
     /**
+     * Contextualized.
+     */
+    private PlexusContainer container;
+    
+    /**
      * @parameter expression="${project}"
      * @readonly
      * @required
@@ -58,6 +72,16 @@
      * @component
      */
     private MavenProjectHelper projectHelper;
+    
+    /**
+     * Specifies an alternative Distribution Management configuration to which artifacts
+     * produced by this plugin should be deployed.
+     * @parameter expression="${distributionManagement}"
+     */
+    protected DistributionManagement distributionManagement;
+    
+    /** @component */
+    private ArtifactRepositoryFactory repositoryFactory;
 
     /**
      * The directory where the generated archive file will be put.
@@ -154,7 +178,23 @@
 
             if ( attach )
             {
-                projectHelper.attachArtifact( project, "java-source", getClassifier(), outputFile );
+            	System.out.println("Attaching");
+            	if (distributionManagement == null) 
+            	{
+            		projectHelper.attachArtifact( project, "java-source", getClassifier(), outputFile );
+            	}
+            	else
+            	{
+            		try
+            		{
+            			projectHelper.attachArtifact(project, distributionManagement, repositoryFactory, container, 
+            					"java-source", getClassifier(), outputFile );
+            		}
+            		catch (InvalidRepositoryException e)
+            		{
+            			throw new MojoExecutionException( "Error attaching source archive: " + e.getMessage(), e );
+            		}
+            	}
             }
             else
             {
@@ -275,4 +315,10 @@
             return project;
         }
     }
+    
+    public void contextualize( Context context )
+    throws ContextException
+	{
+	    this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+	}
 }
Index: pom.xml
===================================================================
--- pom.xml	(revision 565589)
+++ pom.xml	(working copy)
@@ -28,7 +28,7 @@
   <name>Maven Source Plug-In</name>
   <version>2.0.4-SNAPSHOT</version>
   <prerequisites>
-    <maven>2.0</maven>
+    <maven>2.0.8-SNAPSHOT</maven>
   </prerequisites>
   <issueManagement>
     <system>JIRA</system>
@@ -38,22 +38,22 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-model</artifactId>
-      <version>2.0</version>
+      <version>2.0.8-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact</artifactId>
-      <version>2.0</version>
+      <version>2.0.8-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-plugin-api</artifactId>
-      <version>2.0</version>
+      <version>2.0.8-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
-      <version>2.0</version>
+      <version>2.0.8-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>

