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 dd1746c..dbc387a 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
@@ -43,9 +43,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
+import java.util.Set;
 
 /**
  * Wrapper around Eclipse Aether dependency resolver, used in Maven 3.1.
@@ -66,7 +66,7 @@
     private ArtifactFactory factory;
 
     /**
-     * Builds the dependency graph for Maven 3 point 1+.
+     * Builds the dependency graph for Maven 3.1+.
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
@@ -80,7 +80,7 @@
     }
 
     /**
-     * Builds the dependency graph for Maven 3 point 1+ including any dependencies from any projects in the reactor.
+     * Builds the dependency graph for Maven 3.1+ including any dependencies from any projects in the reactor.
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
@@ -129,8 +129,8 @@
         catch ( DependencyResolutionException e )
         {
             // Ignore any resolution failure for deps that are part of the reactor but have not yet been built.
-            // NB Typing has been removed because DependencyResolutionResult returns Sonatype aether in 3.0.4 and
-            // Eclipse aether in 3.1.1 and while dep-tree is a single module we can only compile against one of them.
+            // NB Typing has been removed because DependencyResolutionResult returns Sonatype Aether in 3.0.4 and
+            // Eclipse Aether in 3.1.1 and while dep-tree is a single module we can only compile against one of them.
             //
             // NB While applying this code to Maven3DependencyGraphBuilder is trivial it won't work because
             // in Maven 3, MavenProject.getProjectReferences isn't populated. So we would need to have the reactor
@@ -140,9 +140,10 @@
             // NB There doesn't seem to be any way to apply this to Maven2DependencyGraphBuilder as there is no
             // concept of partial resolution like there is is 3 and 3.1
             final DependencyResolutionResult result = e.getResult();
+
             final List<Dependency> reactorDeps =
                 getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-            Invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
+            result.getUnresolvedDependencies().removeAll( reactorDeps );
             Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
 
             if ( !result.getUnresolvedDependencies().isEmpty() )
@@ -150,18 +151,19 @@
                 throw new DependencyGraphBuilderException( "Could not resolve the following dependencies : "
                     + result.getUnresolvedDependencies(), e );
             }
+
             getLogger().debug( "Resolved dependencies after ignoring reactor dependencies : " + reactorDeps );
+
             return result;
         }
     }
 
     private List<Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects, List<?> dependencies )
     {
-        // Create ProjectMap
-        final Map<ArtifactKey, MavenProject> projectMap = new HashMap<ArtifactKey, MavenProject>();
+        final Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
         for ( final MavenProject project : reactorProjects )
         {
-            projectMap.put( new ArtifactKey( project ), project );
+            reactorProjectsIds.add( new ArtifactKey( project ) );
         }
 
         final List<Dependency> reactorDeps = new ArrayList<Dependency>();
@@ -169,14 +171,16 @@
         {
             final Dependency dependency = (Dependency) untypedDependency;
             final org.eclipse.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-            final ArtifactKey key = new ArtifactKey(
-                    depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion()
-            );
-            if ( projectMap.containsKey( key ) )
+
+            final ArtifactKey key =
+                new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() );
+
+            if ( reactorProjectsIds.contains( key ) )
             {
                 reactorDeps.add( dependency );
             }
         }
+
         return reactorDeps;
     }
 
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 5200b44..bd93bfe 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
@@ -43,9 +43,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
+import java.util.Set;
 
 /**
  * Wrapper around Maven 3 dependency resolver.
@@ -125,9 +125,10 @@
             // NB There doesn't seem to be any way to apply this to Maven2DependencyGraphBuilder as there is no
             // concept of partial resolution like there is is 3 and 3.1
             final DependencyResolutionResult result = e.getResult();
+
             final List<Dependency> reactorDeps =
                 getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-            Invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
+            result.getUnresolvedDependencies().removeAll( reactorDeps );
             Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
 
             if ( !result.getUnresolvedDependencies().isEmpty() )
@@ -135,7 +136,9 @@
                 throw new DependencyGraphBuilderException( "Could not resolve the following dependencies : "
                     + result.getUnresolvedDependencies(), e );
             }
+
             getLogger().debug( "Resolved dependencies after ignoring reactor dependencies : " + reactorDeps );
+
             return result;
         }
     }
@@ -143,28 +146,27 @@
     private List<org.sonatype.aether.graph.Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects,
                                                                                List<?> dependencies )
     {
-        // Create ProjectMap
-        final Map<ArtifactKey, MavenProject> projectMap = new HashMap<ArtifactKey, MavenProject>();
+        final Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
         for ( final MavenProject project : reactorProjects )
         {
-            projectMap.put( new ArtifactKey( project ), project );
+            reactorProjectsIds.add( new ArtifactKey( project ) );
         }
 
-        final List<org.sonatype.aether.graph.Dependency> reactorDeps =
-            new ArrayList<org.sonatype.aether.graph.Dependency>();
+        final List<Dependency> reactorDeps = new ArrayList<Dependency>();
         for ( final Object untypedDependency : dependencies )
         {
-            final org.sonatype.aether.graph.Dependency dependency =
-                (org.sonatype.aether.graph.Dependency) untypedDependency;
+            final Dependency dependency = (Dependency) untypedDependency;
             final org.sonatype.aether.artifact.Artifact depArtifact = dependency.getArtifact();
-            final ArtifactKey key = new ArtifactKey(
-                    depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion()
-            );
-            if ( projectMap.containsKey( key ) )
+
+            final ArtifactKey key =
+                new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() );
+
+            if ( reactorProjectsIds.contains( key ) )
             {
                 reactorDeps.add( dependency );
             }
         }
+
         return reactorDeps;
     }
 
