diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
index 85fc968..bd1e79a 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
@@ -28,7 +28,12 @@
  */
 final class Invoker
 {
-    public Object invoke( Class objectClazz, Object object, String method )
+    private Invoker()
+    {
+        // do not instantiate
+    }
+
+    public static Object invoke( Class<?> objectClazz, Object object, String method )
         throws DependencyGraphBuilderException
     {
         try
@@ -49,12 +54,12 @@
         }
     }
 
-    public Object invoke( Object object, String method, Class<?> clazz, Object arg )
+    public static Object invoke( Object object, String method, Class<?> clazz, Object arg )
         throws DependencyGraphBuilderException
     {
         try
         {
-            final Class objectClazz = object.getClass();
+            final Class<?> objectClazz = object.getClass();
             return objectClazz.getMethod( method, clazz ).invoke( object, arg );
         }
         catch ( IllegalAccessException e )
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 3d958fd..dd1746c 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
@@ -65,8 +65,6 @@
     @Requirement
     private ArtifactFactory factory;
 
-    private final Invoker invoker = new Invoker();
-
     /**
      * Builds the dependency graph for Maven 3 point 1+.
      *
@@ -78,7 +76,7 @@
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, Collections.EMPTY_LIST );
+        return buildDependencyGraph( project, filter, Collections.<MavenProject>emptyList() );
     }
 
     /**
@@ -95,10 +93,10 @@
         throws DependencyGraphBuilderException
     {
         ProjectBuildingRequest projectBuildingRequest =
-            (ProjectBuildingRequest) invoker.invoke( project.getClass(), project, "getProjectBuildingRequest" );
+            (ProjectBuildingRequest) Invoker.invoke( project.getClass(), project, "getProjectBuildingRequest" );
 
         RepositorySystemSession session =
-            (RepositorySystemSession) invoker.invoke( ProjectBuildingRequest.class, projectBuildingRequest,
+            (RepositorySystemSession) Invoker.invoke( ProjectBuildingRequest.class, projectBuildingRequest,
                                                       "getRepositorySession" );
 
         /*
@@ -110,11 +108,11 @@
 
         final DependencyResolutionRequest request = new DefaultDependencyResolutionRequest();
         request.setMavenProject( project );
-        invoker.invoke( request, "setRepositorySession", RepositorySystemSession.class, session );
+        Invoker.invoke( request, "setRepositorySession", RepositorySystemSession.class, session );
 
         final DependencyResolutionResult result = resolveDependencies( request, reactorProjects );
         org.eclipse.aether.graph.DependencyNode graph =
-            (org.eclipse.aether.graph.DependencyNode) invoker.invoke( DependencyResolutionResult.class, result,
+            (org.eclipse.aether.graph.DependencyNode) Invoker.invoke( DependencyResolutionResult.class, result,
                                                                       "getDependencyGraph" );
 
         return buildDependencyNode( null, graph, project.getArtifact(), filter );
@@ -144,8 +142,8 @@
             final DependencyResolutionResult result = e.getResult();
             final List<Dependency> reactorDeps =
                 getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-            invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
-            invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
+            Invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
+            Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
 
             if ( !result.getUnresolvedDependencies().isEmpty() )
             {
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 e21d498..5200b44 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
@@ -65,8 +65,6 @@
     @Requirement
     private ArtifactFactory factory;
 
-    private final Invoker invoker = new Invoker();
-
     /**
      * Builds the dependency graph for Maven 3.
      *
@@ -78,7 +76,7 @@
     public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, Collections.EMPTY_LIST );
+        return buildDependencyGraph( project, filter, Collections.<MavenProject>emptyList() );
     }
 
     /**
@@ -129,8 +127,8 @@
             final DependencyResolutionResult result = e.getResult();
             final List<Dependency> reactorDeps =
                 getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
-            invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
-            invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
+            Invoker.invoke( result.getUnresolvedDependencies(), "removeAll", Collection.class, reactorDeps );
+            Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
 
             if ( !result.getUnresolvedDependencies().isEmpty() )
             {
