Index: /home/herve/projet/workspace/maven-ant-tasks/sample.build.xml
===================================================================
--- /home/herve/projet/workspace/maven-ant-tasks/sample.build.xml	(revision 521859)
+++ /home/herve/projet/workspace/maven-ant-tasks/sample.build.xml	(working copy)
@@ -69,7 +69,7 @@
   </target>
 
   <target name="foo" depends="initTaskDefs">
-    <artifact:dependencies pathId="dependency.classpath" filesetId="dependency.fileset">
+    <artifact:dependencies pathId="dependency.classpath" filesetId="dependency.fileset" sourcesFilesetId="sources.fileset">
       <dependency groupId="org.apache.maven.wagon" artifactId="wagon-provider-test" version="1.0-alpha-4">
         <exclusion groupId="junit" artifactId="junit"/>
       </dependency>
@@ -85,6 +85,10 @@
     <copy todir="target/files">
       <fileset refid="dependency.fileset"/>
     </copy>
+    <copy todir="target/files/sources">
+      <fileset refid="sources.fileset"/>
+    </copy>
+
 
     <artifact:dependencies filesetId="my.dependency.fileset" verbose="true">
       <pom refid="maven.project"/>
@@ -212,7 +216,7 @@
     <artifact:deploy file="sample-build-test.pom">
       <pom file="sample-build-test.pom" />
       <remoteRepository refid="deploy.repository" />
-    </artifact:deploy>  
+    </artifact:deploy>
   </target>
 </project>
 
Index: /home/herve/projet/workspace/maven-ant-tasks/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
===================================================================
--- /home/herve/projet/workspace/maven-ant-tasks/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java	(revision 521859)
+++ /home/herve/projet/workspace/maven-ant-tasks/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java	(working copy)
@@ -64,6 +64,8 @@
 
     private String filesetId;
 
+    private String sourcesFilesetId;
+
     private String useScope;
 
     private String type;
@@ -117,6 +119,13 @@
 
         ArtifactResolutionResult result;
         Set artifacts;
+        List remoteRepositories = getRemoteRepositories();
+
+        RemoteRepository remoteRepository = getDefaultRemoteRepository();
+        remoteRepositories.add( remoteRepository );
+
+        List remoteArtifactRepositories = createRemoteArtifactRepositories( remoteRepositories );
+
         try
         {
             artifacts = MavenMetadataSource.createArtifacts( artifactFactory, dependencies, null, null, null );
@@ -130,13 +139,6 @@
                 listeners = Collections.singletonList( new AntResolutionListener( getProject() ) );
             }
 
-            List remoteRepositories = getRemoteRepositories();
-
-            RemoteRepository remoteRepository = getDefaultRemoteRepository();
-            remoteRepositories.add( remoteRepository );
-
-            List remoteArtifactRepositories = createRemoteArtifactRepositories( remoteRepositories );
-
             // TODO: managed dependencies
             Map managedDependencies = Collections.EMPTY_MAP;
 
@@ -187,6 +189,11 @@
             throw new BuildException( "Reference ID " + filesetId + " already exists" );
         }
 
+        if ( sourcesFilesetId != null && getProject().getReference( sourcesFilesetId ) != null )
+        {
+            throw new BuildException( "Reference ID " + sourcesFilesetId + " already exists" );
+        }
+
         FileList fileList = new FileList();
         fileList.setDir( getLocalRepository().getLocation() );
 
@@ -193,6 +200,12 @@
         FileSet fileSet = new FileSet();
         fileSet.setDir( fileList.getDir( getProject() ) );
 
+        FileList sourcesFileList = new FileList();
+        sourcesFileList.setDir( getLocalRepository().getLocation() );
+
+        FileSet sourcesFileSet = new FileSet();
+        sourcesFileSet.setDir( sourcesFileList.getDir( getProject() ) );
+
         if ( result.getArtifacts().isEmpty() )
         {
             fileSet.createExclude().setName( "**/**" );
@@ -210,6 +223,37 @@
                 fileList.addConfiguredFile( file );
 
                 fileSet.createInclude().setName( filename );
+
+                if ( sourcesFilesetId != null )
+                {
+                    // get sources
+                    Artifact sourcesArtifact =
+                        artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact.getArtifactId(),
+                                                                      artifact.getVersion(), "java-source", "sources" );
+                    if ( sourcesArtifact != null )
+                    {
+                        try
+                        {
+                            resolver.resolve( sourcesArtifact, remoteArtifactRepositories, localRepo );
+                            String sourcesFilename = localRepo.pathOf( sourcesArtifact );
+
+                            FileList.FileName sourcesFile = new FileList.FileName();
+                            sourcesFile.setName( sourcesFilename );
+
+                            sourcesFileList.addConfiguredFile( sourcesFile );
+
+                            sourcesFileSet.createInclude().setName( sourcesFilename );
+                        }
+                        catch ( ArtifactResolutionException e )
+                        {
+                            throw new BuildException( "Unable to resolve artifact: " + e.getMessage(), e );
+                        }
+                        catch ( ArtifactNotFoundException e )
+                        {
+                            // no sources available: no problem
+                        }
+                    }
+                }
             }
         }
 
@@ -224,6 +268,11 @@
         {
             getProject().addReference( filesetId, fileSet );
         }
+
+        if ( sourcesFilesetId != null )
+        {
+            getProject().addReference( sourcesFilesetId, sourcesFileSet );
+        }
     }
 
     private List createRemoteArtifactRepositories( List remoteRepositories )
@@ -271,6 +320,16 @@
         return filesetId;
     }
 
+    public void setSourcesFilesetId( String filesetId )
+    {
+        this.sourcesFilesetId = filesetId;
+    }
+
+    public String getSourcesFilesetId()
+    {
+        return sourcesFilesetId;
+    }
+
     public void setFilesetId( String filesetId )
     {
         this.filesetId = filesetId;

