diff --git a/pom.xml b/pom.xml
index 87921cb..74eb8f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -150,11 +150,7 @@
             <goal>install</goal> <!-- So that the multi-module-plugin is installed into the integration-test repo -->
           </goals>
           <pomIncludes>
-            <!--pomInclude>*/pom.xml</pomInclude-->
-            <pomInclude>maven-version/pom.xml</pomInclude>
-            <pomInclude>mshared-167/pom.xml</pomInclude>
-            <pomInclude>multi-module-plugin/pom.xml</pomInclude>
-            <pomInclude>multi-module-test/pom.xml</pomInclude>
+            <pomInclude>*/pom.xml</pomInclude>
           </pomIncludes>
         </configuration>
         <executions>
@@ -171,23 +167,6 @@
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
-        <version>0.10</version>
-        <configuration>
-          <excludes>
-            <!--
-              These files contains the expected output of this component and can not contain a license header.
-            -->
-            <exclude>src/it/maven-version/expected.txt</exclude>
-            <exclude>src/it/mshared-167/expected-M2.txt</exclude>
-            <exclude>src/it/mshared-167/expected-M3.txt</exclude>
-            <exclude>src/it/verbose/expected-default.txt</exclude>
-            <exclude>src/it/verbose/expected-verbose.txt</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
         <configuration>
           <excludes>
             <exclude>src/test/resources*/**</exclude>
diff --git a/src/it/multi-module-plugin/src/main/java/org/apache/maven/its/deptree/ResolveDependenciesLifecycleParticipant.java b/src/it/multi-module-plugin/src/main/java/org/apache/maven/its/deptree/ResolveDependenciesLifecycleParticipant.java
index 43665de..99c3c15 100644
--- a/src/it/multi-module-plugin/src/main/java/org/apache/maven/its/deptree/ResolveDependenciesLifecycleParticipant.java
+++ b/src/it/multi-module-plugin/src/main/java/org/apache/maven/its/deptree/ResolveDependenciesLifecycleParticipant.java
@@ -25,14 +25,11 @@
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
-import org.apache.maven.shared.dependency.graph.ProjectReferenceKeyGenerator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Resolves all the dependencies in the project immediately after the Project has been read.
@@ -64,18 +61,6 @@
 
         final List<MavenProject> projects = session.getProjects();
 
-        // NB We could get this from session.getProjectMap() but it doesn't exist in Maven-2.2.1 or 3.0.4
-        final Map<String, MavenProject> reactorProjects = new HashMap<String, MavenProject>();
-        final ProjectReferenceKeyGenerator keyGenerator = new ProjectReferenceKeyGenerator();
-
-        log.debug( "Reactor projects:" );
-        for ( MavenProject project : projects )
-        {
-            log.debug( " - " + project );
-            reactorProjects.put( keyGenerator.getProjectReferenceKey( project ), project );
-        }
-        log.debug( "" );
-
         for ( MavenProject project : projects )
         {
             log.debug( "" );
@@ -84,7 +69,7 @@
             try
             {
                 // No need to filter our search. We want to resolve all artifacts.
-                dependencyGraphBuilder.buildDependencyGraph( project, null, reactorProjects );
+                dependencyGraphBuilder.buildDependencyGraph( project, null, projects );
             }
             catch ( DependencyGraphBuilderException e )
             {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
index 3fba585..7bf0300 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
@@ -22,7 +22,7 @@
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 
-import java.util.Map;
+import java.util.Collection;
 
 /**
  * Maven project dependency graph builder API, neutral against Maven 2 or Maven 3.
@@ -34,13 +34,14 @@
 {
     /**
      * Build the dependency graph from the repository. This is the same as
-     * {@link #buildDependencyGraph(org.apache.maven.project.MavenProject, org.apache.maven.artifact.resolver.filter.ArtifactFilter, java.util.Map)}
+     * {@link #buildDependencyGraph(org.apache.maven.project.MavenProject,
+     *  org.apache.maven.artifact.resolver.filter.ArtifactFilter, java.util.Collection)}
      * with an empty reactorProjects Map.
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
      * @return the dependency graph
-     * @throws DependencyGraphBuilderException
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
      */
     DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException;
@@ -50,12 +51,11 @@
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Map of those projects contained in the reactor. Key is made up of
-     *            groupId-artifactId-version.
+     * @param reactorProjects Collection of those projects contained in the reactor.
      * @return the dependency graph
-     * @throws DependencyGraphBuilderException
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
      */
     DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter,
-                                         Map<String, MavenProject> reactorProjects )
+                                         Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException;
 }
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilderException.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilderException.java
index 29673cd..9d92bda 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilderException.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilderException.java
@@ -32,11 +32,18 @@
 
     // constructors -----------------------------------------------------------
 
+    /**
+     * @param message   Message indicating why dependency graph could not be resolved.
+     */
     public DependencyGraphBuilderException( String message )
     {
         super( message );
     }
 
+    /**
+     * @param message   Message indicating why dependency graph could not be resolved.
+     * @param cause     Throwable indicating at which point the graph failed to be resolved.
+     */
     public DependencyGraphBuilderException( String message, Throwable cause )
     {
         super( message, cause );
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
index 226bc30..a1c0a27 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
@@ -33,8 +33,14 @@
  */
 public interface DependencyNode
 {
+    /**
+     * @return Artifact for this DependencyNode.
+     */
     Artifact getArtifact();
 
+    /**
+     * @return children of this DependencyNode.
+     */
     List<DependencyNode> getChildren();
 
     /**
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/ProjectReferenceKeyGenerator.java b/src/main/java/org/apache/maven/shared/dependency/graph/ProjectReferenceKeyGenerator.java
deleted file mode 100644
index 772dfdb..0000000
--- a/src/main/java/org/apache/maven/shared/dependency/graph/ProjectReferenceKeyGenerator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.maven.shared.dependency.graph;
-
-/*
- * 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.project.MavenProject;
-
-/**
- * Generates the key used by {@link org.apache.maven.project.MavenProject#getProjectReferences()} ,
- * {@link org.apache.maven.execution.MavenSession#getProjectMap()} and the Map passed into
- * {@link org.apache.maven.shared.dependency.graph.DependencyGraphBuilder#buildDependencyGraph (org.apache.maven.project.MavenProject, org.apache.maven.artifact.resolver.filter.ArtifactFilter, java.util.Map)}
- * .
- */
-public final class ProjectReferenceKeyGenerator
-{
-    // NB Copied here from MavenProject - because MavenProject#getProjectReferenceId is private
-    public String getProjectReferenceKey( String groupId, String artifactId, String version )
-    {
-        final StringBuilder buffer = new StringBuilder( 128 );
-        buffer.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( version );
-        return buffer.toString();
-    }
-
-    public String getProjectReferenceKey( MavenProject project )
-    {
-        return getProjectReferenceKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
-    }
-}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/ArtifactKey.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/ArtifactKey.java
new file mode 100644
index 0000000..f2aa10f
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/ArtifactKey.java
@@ -0,0 +1,85 @@
+package org.apache.maven.shared.dependency.graph.internal;
+
+/*
+ * 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.project.MavenProject;
+
+/**
+ * Uniquely defines an artifact by groupId, artifactId and version.
+ */
+final class ArtifactKey
+{
+    private static final int HASH_PRIME = 31;
+
+    private final String groupId;
+    private final String artifactId;
+    private final String version;
+
+    ArtifactKey( String groupId, String artifactId, String version )
+    {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+    }
+
+    public ArtifactKey( MavenProject project )
+    {
+        this ( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( !( o instanceof ArtifactKey ) )
+        {
+            return false;
+        }
+
+        ArtifactKey that = ( ArtifactKey ) o;
+
+        if ( !artifactId.equals( that.artifactId ) )
+        {
+            return false;
+        }
+        if ( !groupId.equals( that.groupId ) )
+        {
+            return false;
+        }
+        if ( !version.equals( that.version ) )
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = groupId.hashCode();
+        result = HASH_PRIME * result + artifactId.hashCode();
+        result = HASH_PRIME * result + version.hashCode();
+        return result;
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
index 95b5763..b4fd9d3 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
@@ -33,8 +33,8 @@
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.Map;
 
 /**
  * Default dependency graph builder that detects current Maven version to delegate to either Maven 2 or Maven 3 specific
@@ -52,14 +52,31 @@
 {
     protected PlexusContainer container;
 
+    /**
+     * Builds a dependency graph.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, Collections.EMPTY_MAP );
+        return buildDependencyGraph( project, filter, Collections.EMPTY_LIST );
     }
 
+    /**
+     * Builds a dependency graph.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @param reactorProjects Collection of those projects contained in the reactor.
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter,
-                                                Map<String, MavenProject> reactorProjects )
+                                                Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         try
@@ -80,7 +97,7 @@
     }
 
     /**
-     * Check the current Maven version to see if it's Maven 2.x.
+     * @return true if the current Maven is Maven 2.x.
      */
     protected static boolean isMaven2x()
     {
@@ -88,7 +105,7 @@
     }
 
     /**
-     * Check the current Maven version to see if it's Maven 3.1.
+     * @return true if the current Maven version is Maven 3.1.
      */
     protected static boolean isMaven31()
     {
@@ -109,6 +126,12 @@
         }
     }
 
+    /**
+     * Injects the Plexus content.
+     *
+     * @param context   Plexus context to inject.
+     * @throws ContextException if the PlexusContainer could not be located.
+     */
     public void contextualize( Context context )
         throws ContextException
     {
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
index 2a8ef57..4e5a8cc 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
@@ -25,8 +25,10 @@
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
 
-public class DefaultDependencyNode
-    implements DependencyNode
+/**
+ * Default implementation of a DependencyNode.
+ */
+public class DefaultDependencyNode implements DependencyNode
 {
     private final Artifact artifact;
 
@@ -40,6 +42,15 @@
 
     private List<DependencyNode> children;
 
+    /**
+     * Constructs the DefaultDependencyNode.
+     *
+     * @param parent            Parent node.
+     * @param artifact          Artifact associated with this dependency.
+     * @param premanagedVersion
+     * @param premanagedScope
+     * @param versionConstraint
+     */
     public DefaultDependencyNode( DependencyNode parent, Artifact artifact, String premanagedVersion,
                                   String premanagedScope, String versionConstraint )
     {
@@ -73,21 +84,34 @@
         return visitor.endVisit( this );
     }
 
+    /**
+     * @return Artifact for this DependencyNode.
+     */
     public Artifact getArtifact()
     {
         return artifact;
     }
 
+    /**
+     *
+     * @param children  List of DependencyNode to set as child nodes.
+     */
     public void setChildren( List<DependencyNode> children )
     {
         this.children = children;
     }
 
+    /**
+     * @return List of child nodes for this DependencyNode.
+     */
     public List<DependencyNode> getChildren()
     {
         return children;
     }
 
+    /**
+     * @return Parent of this DependencyNode.
+     */
     public DependencyNode getParent()
     {
         return parent;
@@ -108,6 +132,9 @@
         return versionConstraint;
     }
 
+    /**
+     * @return Stringified representation of this DependencyNode.
+     */
     public String toNodeString()
     {
         StringBuffer buffer = new StringBuffer();
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
index df37ab0..6386860 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
@@ -19,11 +19,6 @@
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
@@ -35,6 +30,11 @@
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * Wrapper around Maven 2 dependency tree builder.
  *
@@ -50,6 +50,14 @@
     @Requirement
     private DependencyTreeBuilder treeBuilder;
 
+    /**
+     * Builds the dependency graph for Maven 2.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
@@ -63,8 +71,19 @@
         }
     }
 
+    /**
+     * Builds the dependency graph for Maven 2.
+     *
+     * NB the reactor projects are ignored as Maven 2 is not able to resolve projects from the reactor.
+     *
+     * @param project           the project
+     * @param filter            artifact filter (can be <code>null</code>)
+     * @param reactorProjects   Ignored.
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter,
-                                                Map<String, MavenProject> reactorProjects )
+                                                Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         getLogger().warn( "Reactor projects ignored - reactor dependencies cannot be resolved in Maven2" );
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
index 4f8e7da..3d958fd 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
@@ -33,7 +33,6 @@
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
 import org.apache.maven.shared.dependency.graph.DependencyNode;
-import org.apache.maven.shared.dependency.graph.ProjectReferenceKeyGenerator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -44,6 +43,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -67,16 +67,31 @@
 
     private final Invoker invoker = new Invoker();
 
-    private final ProjectReferenceKeyGenerator keyGenerator = new ProjectReferenceKeyGenerator();
-
+    /**
+     * Builds the dependency graph for Maven 3 point 1+.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, Collections.EMPTY_MAP );
+        return buildDependencyGraph( project, filter, Collections.EMPTY_LIST );
     }
 
+    /**
+     * Builds the dependency graph for Maven 3 point 1+ including any dependencies from any projects in the reactor.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @param reactorProjects Collection of those projects contained in the reactor.
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter,
-                                                Map<String, MavenProject> reactorProjects )
+                                                Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         ProjectBuildingRequest projectBuildingRequest =
@@ -106,7 +121,7 @@
     }
 
     private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request,
-                                                            Map<String, MavenProject> reactorProjects )
+                                                            Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         try
@@ -142,17 +157,24 @@
         }
     }
 
-    private List<Dependency> getReactorDependencies( Map<String, MavenProject> reactorProjects, List<?> dependencies )
+    private List<Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects, List<?> dependencies )
     {
+        // Create ProjectMap
+        final Map<ArtifactKey, MavenProject> projectMap = new HashMap<ArtifactKey, MavenProject>();
+        for ( final MavenProject project : reactorProjects )
+        {
+            projectMap.put( new ArtifactKey( project ), project );
+        }
+
         final List<Dependency> reactorDeps = new ArrayList<Dependency>();
         for ( final Object untypedDependency : dependencies )
         {
             final Dependency dependency = (Dependency) untypedDependency;
             final org.eclipse.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-            final String projectRefId =
-                keyGenerator.getProjectReferenceKey( depArtifact.getGroupId(), depArtifact.getArtifactId(),
-                                                     depArtifact.getVersion() );
-            if ( reactorProjects.containsKey( projectRefId ) )
+            final ArtifactKey key = new ArtifactKey(
+                    depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion()
+            );
+            if ( projectMap.containsKey( key ) )
             {
                 reactorDeps.add( dependency );
             }
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
index df9d88f..e21d498 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
@@ -19,13 +19,6 @@
  * under the License.
  */
 
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -40,13 +33,20 @@
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
 import org.apache.maven.shared.dependency.graph.DependencyNode;
-import org.apache.maven.shared.dependency.graph.ProjectReferenceKeyGenerator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.version.VersionConstraint;
 
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Wrapper around Maven 3 dependency resolver.
  *
@@ -67,16 +67,31 @@
 
     private final Invoker invoker = new Invoker();
 
-    private final ProjectReferenceKeyGenerator keyGenerator = new ProjectReferenceKeyGenerator();
-
+    /**
+     * Builds the dependency graph for Maven 3.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, Collections.EMPTY_MAP );
+        return buildDependencyGraph( project, filter, Collections.EMPTY_LIST );
     }
 
+    /**
+     * Builds the dependency graph for Maven 3 including any dependencies from any projects in the reactor.
+     *
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @param reactorProjects Collection of those projects contained in the reactor.
+     * @return DependencyNode containing the dependency graph.
+     * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved.
+     */
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter,
-                                                Map<String, MavenProject> reactorProjects )
+                                                Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         ProjectBuildingRequest projectBuildingRequest =
@@ -91,7 +106,7 @@
     }
 
     private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request,
-                                                            Map<String, MavenProject> reactorProjects )
+                                                            Collection<MavenProject> reactorProjects )
         throws DependencyGraphBuilderException
     {
         try
@@ -127,9 +142,16 @@
         }
     }
 
-    private List<org.sonatype.aether.graph.Dependency> getReactorDependencies( Map<String, MavenProject> reactorProjects,
+    private List<org.sonatype.aether.graph.Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects,
                                                                                List<?> dependencies )
     {
+        // Create ProjectMap
+        final Map<ArtifactKey, MavenProject> projectMap = new HashMap<ArtifactKey, MavenProject>();
+        for ( final MavenProject project : reactorProjects )
+        {
+            projectMap.put( new ArtifactKey( project ), project );
+        }
+
         final List<org.sonatype.aether.graph.Dependency> reactorDeps =
             new ArrayList<org.sonatype.aether.graph.Dependency>();
         for ( final Object untypedDependency : dependencies )
@@ -137,10 +159,10 @@
             final org.sonatype.aether.graph.Dependency dependency =
                 (org.sonatype.aether.graph.Dependency) untypedDependency;
             final org.sonatype.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-            final String projectRefId =
-                keyGenerator.getProjectReferenceKey( depArtifact.getGroupId(), depArtifact.getArtifactId(),
-                                                     depArtifact.getVersion() );
-            if ( reactorProjects.containsKey( projectRefId ) )
+            final ArtifactKey key = new ArtifactKey(
+                    depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion()
+            );
+            if ( projectMap.containsKey( key ) )
             {
                 reactorDeps.add( dependency );
             }
@@ -183,11 +205,9 @@
                                                 Artifact artifact, ArtifactFilter filter )
     {
         DefaultDependencyNode current =
-            new DefaultDependencyNode( parent, artifact, null /* node.getPremanagedVersion() */, null /*
-                                                                                                       * node.
-                                                                                                       * getPremanagedScope
-                                                                                                       * ()
-                                                                                                       */,
+            new DefaultDependencyNode( parent, artifact,
+                                       null /* node.getPremanagedVersion() */,
+                                       null /* node.getPremanagedScope() */,
                                        getVersionSelectedFromRange( node.getVersionConstraint() ) );
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
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 4293b3e..491f8db 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
@@ -133,6 +133,13 @@
         }
     }
 
+    /**
+     * Builds a dependency tree.
+     *
+     * @param project   MavenProject for which ot build the dependency tree.
+     * @return DependencyNode containing the dependency tree for the project.
+     * @throws DependencyTreeBuilderException if the dependency tree could not be built.
+     */
     public DependencyNode buildDependencyTree( MavenProject project )
         throws DependencyTreeBuilderException
     {
@@ -140,6 +147,15 @@
                                     metadataSource, null, collector );
     }
 
+    /**
+     * Builds a dependency tree.
+     *
+     * @param project       MavenProject for which ot build the dependency tree.
+     * @param repository    ArtifactRepository to search fro dependencies.
+     * @param filter        Filter to apply when searching for dependencies.
+     * @return DependencyNode containing the dependency tree for the project.
+     * @throws DependencyTreeBuilderException if the dependency tree could not be built.
+     */
     public DependencyNode buildDependencyTree( MavenProject project, ArtifactRepository repository,
                                                ArtifactFilter filter )
         throws DependencyTreeBuilderException
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
index 5f989cb..dc4b7fa 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
@@ -42,6 +42,8 @@
 {
     // constants --------------------------------------------------------------
 
+    private static final int HASH_PRIME = 31;
+
     /**
      * State that represents an included dependency node.
      * 
@@ -714,6 +716,9 @@
             case OMITTED_FOR_CYCLE:
                 appender.append( "omitted for cycle" );
                 break;
+
+            default:
+                break;
         }
 
         appender.flush();
@@ -752,22 +757,22 @@
 
         int hashCode = 1;
 
-        hashCode = hashCode * 31 + getArtifact().hashCode();
+        hashCode = hashCode * HASH_PRIME + getArtifact().hashCode();
         // DefaultArtifact.hashCode does not consider scope
-        hashCode = hashCode * 31 + nullHashCode( getArtifact().getScope() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getArtifact().getScope() );
 
         // TODO: use parent's artifact to prevent recursion - how can we improve this?
-        hashCode = hashCode * 31 + nullHashCode( nullGetArtifact( getParent() ) );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( nullGetArtifact( getParent() ) );
 
-        hashCode = hashCode * 31 + getChildren().hashCode();
-        hashCode = hashCode * 31 + getState();
-        hashCode = hashCode * 31 + nullHashCode( getRelatedArtifact() );
-        hashCode = hashCode * 31 + nullHashCode( getPremanagedVersion() );
-        hashCode = hashCode * 31 + nullHashCode( getPremanagedScope() );
-        hashCode = hashCode * 31 + nullHashCode( getOriginalScope() );
-        hashCode = hashCode * 31 + nullHashCode( getFailedUpdateScope() );
-        hashCode = hashCode * 31 + nullHashCode( getVersionSelectedFromRange() );
-        hashCode = hashCode * 31 + nullHashCode( getAvailableVersions() );
+        hashCode = hashCode * HASH_PRIME + getChildren().hashCode();
+        hashCode = hashCode * HASH_PRIME + getState();
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getRelatedArtifact() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getPremanagedVersion() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getPremanagedScope() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getOriginalScope() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getFailedUpdateScope() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getVersionSelectedFromRange() );
+        hashCode = hashCode * HASH_PRIME + nullHashCode( getAvailableVersions() );
 
         return hashCode;
     }
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilder.java b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilder.java
index d7f9453..b11caa4 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeBuilder.java
@@ -57,7 +57,8 @@
      * @return the dependency tree of the specified Maven project
      * @throws DependencyTreeBuilderException if the dependency tree cannot be resolved
      * @deprecated As of 1.1, replaced by
-     *             {@link #buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+     * {@link #buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource,
+     * ArtifactFilter, ArtifactCollector)}
      */
     DependencyTree buildDependencyTree( MavenProject project, ArtifactRepository repository, ArtifactFactory factory,
                                         ArtifactMetadataSource metadataSource, ArtifactCollector collector )
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
index d9fe855..b8da755 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
@@ -30,7 +30,6 @@
 import org.apache.maven.artifact.resolver.ResolutionListener;
 import org.apache.maven.artifact.resolver.ResolutionListenerForDepMgmt;
 import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
 import org.codehaus.plexus.logging.Logger;
 
 /**
@@ -313,7 +312,8 @@
      */
     public void restrictRange( Artifact artifact, Artifact replacement, VersionRange versionRange )
     {
-        log( "restrictRange: artifact=" + artifact + ", replacement=" + replacement + ", versionRange=" + versionRange );
+        log( "restrictRange: artifact=" + artifact + ", replacement=" + replacement
+                 + ", versionRange=" + versionRange );
 
         // TODO: track range restriction in node (MNG-3093)
     }
@@ -368,7 +368,9 @@
      * Gets a list of all dependency nodes in the computed dependency tree.
      * 
      * @return a list of dependency nodes
-     * @deprecated As of 1.1, use a {@link CollectingDependencyNodeVisitor} on the root dependency node
+     * @deprecated As of 1.1, use a
+     * {@link org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor}
+     * on the root dependency node
      */
     public Collection<DependencyNode> getNodes()
     {
