diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java b/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
index a1e204c..22ea5e7 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
@@ -28,6 +28,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactCollector;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@@ -45,6 +46,10 @@
  */
 public class DefaultDependencyTreeBuilder extends AbstractLogEnabled implements DependencyTreeBuilder
 {
+    // fields -----------------------------------------------------------------
+    
+    private ArtifactResolutionResult result;
+    
     // DependencyTreeBuilder methods ------------------------------------------
 
     /*
@@ -94,7 +99,7 @@
             
             // TODO: note that filter does not get applied due to MNG-3236
 
-            collector.collect( dependencyArtifacts, project.getArtifact(), managedVersions, repository,
+            result = collector.collect( dependencyArtifacts, project.getArtifact(), managedVersions, repository,
                                project.getRemoteArtifactRepositories(), metadataSource, filter,
                                Collections.singletonList( listener ) );
 
@@ -110,4 +115,11 @@
                 + project.getArtifact() );
         }
     }
+    
+    // protected methods ------------------------------------------------------
+    
+    protected ArtifactResolutionResult getArtifactResolutionResult()
+    {
+        return result;
+    }
 }
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java b/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java
index ad7c8d0..ff41b4c 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilderTest.java
@@ -38,7 +38,6 @@
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ResolutionNode;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -57,7 +56,7 @@
 {
     // fields -----------------------------------------------------------------
 
-    private DependencyTreeBuilder builder;
+    private DefaultDependencyTreeBuilder builder;
 
     private ArtifactRepository artifactRepository;
 
@@ -76,7 +75,7 @@
     {
         super.setUp();
 
-        builder = (DependencyTreeBuilder) lookup( DependencyTreeBuilder.ROLE );
+        builder = (DefaultDependencyTreeBuilder) lookup( DependencyTreeBuilder.ROLE );
 
         String repositoryURL = getTestFile( "target/local-repo" ).toURI().toString();
         artifactRepository = new DefaultArtifactRepository( "local", repositoryURL, new DefaultRepositoryLayout() );
@@ -107,9 +106,8 @@
      * </pre>
      * 
      * @throws DependencyTreeBuilderException 
-     * @throws ArtifactResolutionException 
      */
-    public void testProjectWithDependency() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithDependency() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -132,9 +130,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithTransitiveDependency() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithTransitiveDependency() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -163,9 +160,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithDuplicateDependency() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithDuplicateDependency() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact child1Artifact = createArtifact( "g:a:t:1" );
@@ -201,9 +197,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithConflictDependencyVersionFirstWins() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithConflictDependencyVersionFirstWins() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact nearestArtifact = createArtifact( "g:a:t:1" );
@@ -235,9 +230,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithConflictDependencyVersionLastWins() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithConflictDependencyVersionLastWins() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -269,9 +263,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithConflictDependencyScopeCurrentPom() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithConflictDependencyScopeCurrentPom() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact nearestArtifact = createArtifact( "g:b:t:1:test" );
@@ -294,7 +287,7 @@
 
     // TODO: fix when discussion resolved: http://www.mail-archive.com/dev@maven.apache.org/msg68011.html
     /*
-    public void testProjectWithConflictDependencyScope() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithConflictDependencyScope() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -334,7 +327,7 @@
 
     // TODO: fix when discussion resolved: http://www.mail-archive.com/dev@maven.apache.org/msg68011.html
     /*
-    public void testProjectWithConflictDependencyScopeReversedOrder() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithConflictDependencyScopeReversedOrder() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -373,9 +366,8 @@
      * </pre>
      * 
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithManagedTransitiveDependencyVersion() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithManagedTransitiveDependencyVersion() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -406,9 +398,8 @@
      * </pre>
      *
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithManagedTransitiveDependencyScope() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithManagedTransitiveDependencyScope() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -440,9 +431,8 @@
      * </pre>
      * 
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithManagedTransitiveDependencyVersionAndScope() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithManagedTransitiveDependencyVersionAndScope() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact childArtifact = createArtifact( "g:a:t:1" );
@@ -476,9 +466,8 @@
      * </pre>
      * 
      * @throws DependencyTreeBuilderException
-     * @throws ArtifactResolutionException
      */
-    public void testProjectWithManagedTransitiveDependencyVersionAndConflictDependencyVersion() throws DependencyTreeBuilderException, ArtifactResolutionException
+    public void testProjectWithManagedTransitiveDependencyVersionAndConflictDependencyVersion() throws DependencyTreeBuilderException
     {
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
         Artifact nearestArtifact = createArtifact( "g:a:t:1" );
@@ -594,12 +583,12 @@
         return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getType() + (artifact.getClassifier() != null ? ":" + artifact.getClassifier() : "");
     }
     
-    private void assertDependencyTree( DependencyNode expectedRootNode, MavenProject project ) throws DependencyTreeBuilderException, ArtifactResolutionException
+    private void assertDependencyTree( DependencyNode expectedRootNode, MavenProject project ) throws DependencyTreeBuilderException
     {
         assertDependencyTree( expectedRootNode, project, null );
     }
     
-    private void assertDependencyTree( DependencyNode expectedRootNode, MavenProject project, ArtifactFilter artifactFilter ) throws DependencyTreeBuilderException, ArtifactResolutionException
+    private void assertDependencyTree( DependencyNode expectedRootNode, MavenProject project, ArtifactFilter artifactFilter ) throws DependencyTreeBuilderException
     {
         // assert built dependency tree is as expected
         
@@ -611,19 +600,11 @@
         
         // assert resolution tree is as expected
         
-        ArtifactResolutionResult result = collect( project, artifactFilter );
+        ArtifactResolutionResult result = builder.getArtifactResolutionResult();
         
         assertTreeEquals( expectedRootNode, project, result );
     }
     
-    private ArtifactResolutionResult collect( MavenProject project, ArtifactFilter artifactFilter ) throws ArtifactResolutionException
-    {
-        return artifactCollector.collect( project.getDependencyArtifacts(), project.getArtifact(),
-                                          project.getManagedVersionMap(), artifactRepository,
-                                          project.getRemoteArtifactRepositories(), artifactMetadataSource,
-                                          artifactFilter, Collections.EMPTY_LIST );
-    }
-    
     private void assertTreeEquals( DependencyNode dependencyNode, MavenProject project, ArtifactResolutionResult resolutionResult )
     {
         List rootChildrenResolutionNodes = ResolutionNodeUtils.getRootChildrenResolutionNodes( project, resolutionResult );
