diff --git a/pom.xml b/pom.xml
index ae98e2d..ec3399f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,9 +78,14 @@
     <dependency>
       <groupId>org.eclipse.aether</groupId>
       <artifactId>aether-api</artifactId>
-      <version>0.9.0.M1</version>
+      <version>0.9.0.M2</version>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>0.9.0.M2</version>
+    </dependency>
 
     <dependency>
       <groupId>jmock</groupId>
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 bc229d0..9caacf0 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
@@ -73,16 +73,7 @@
      */
     protected static boolean isMaven2x()
     {
-        try
-        {
-            Thread.currentThread().getContextClassLoader().loadClass( "org.apache.maven.project.DependencyResolutionRequest" ); // Maven 3 specific
-
-            return false;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return true;
-        }
+        return !canFindCoreClass( "org.apache.maven.project.DependencyResolutionRequest" ); // Maven 3 specific
     }
 
     /**
@@ -90,15 +81,20 @@
      */
     protected static boolean isMaven31()
     {
+        return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+    }
+
+    private static boolean canFindCoreClass( String className)
+    {
         try
         {
-            Class.forName( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+            Thread.currentThread().getContextClassLoader().loadClass( className );
 
-            return false;
+            return true;
         }
         catch ( ClassNotFoundException e )
         {
-            return true;
+            return false;
         }
     }
 
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 e7d2644..e288f4d 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
@@ -40,7 +40,10 @@
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 import org.eclipse.aether.version.VersionConstraint;
 
 /**
@@ -66,15 +69,31 @@
         try
         {
             ProjectBuildingRequest projectBuildingRequest =
-                (ProjectBuildingRequest) invoke( project, "getProjectBuildingRequest" );
+                (ProjectBuildingRequest) invoke( project.getClass(), project, "getProjectBuildingRequest" );
+
+            RepositorySystemSession session =
+                (RepositorySystemSession) invoke( ProjectBuildingRequest.class, projectBuildingRequest,
+                                                  "getRepositorySession" );
+
+            if ( Boolean.TRUE != ( (Boolean) session.getConfigProperties().get( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION ) ) )
+            {
+                DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );
+                newSession.setConfigProperty( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, true );
+                session = newSession;
+            }
 
             DependencyResolutionRequest request =
-                new DefaultDependencyResolutionRequest( project, projectBuildingRequest.getRepositorySession() );
+                new DefaultDependencyResolutionRequest();
+            request.setMavenProject( project );
+            invoke( request, "setRepositorySession", RepositorySystemSession.class, session );
 
             DependencyResolutionResult result = resolver.resolve( request );
 
-            return buildDependencyNode( null, (org.eclipse.aether.graph.DependencyNode) result.getDependencyGraph(),
-                                        project.getArtifact(), filter );
+            org.eclipse.aether.graph.DependencyNode graph =
+                (org.eclipse.aether.graph.DependencyNode) invoke( DependencyResolutionResult.class, result,
+                                                                  "getDependencyGraph" );
+
+            return buildDependencyNode( null, graph, project.getArtifact(), filter );
         }
         catch ( DependencyResolutionException e )
         {
@@ -94,10 +113,16 @@
         }
     }
 
-    private Object invoke( Object object, String method )
+    private Object invoke( Class<?> clazz, Object object, String method )
         throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
     {
-        return object.getClass().getMethod( method ).invoke( object );
+        return clazz.getMethod( method ).invoke( object );
+    }
+
+    private Object invoke( Object object, String method, Class<?> clazz, Object arg )
+        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
+    {
+        return object.getClass().getMethod( method, clazz ).invoke( object, arg );
     }
 
     private Artifact getDependencyArtifact( Dependency dep )
@@ -113,8 +138,11 @@
     private DependencyNode buildDependencyNode( DependencyNode parent, org.eclipse.aether.graph.DependencyNode node,
                                                 Artifact artifact, ArtifactFilter filter )
     {
+        String premanagedVersion = DependencyManagerUtils.getPremanagedVersion( node );
+        String premanagedScope = DependencyManagerUtils.getPremanagedScope( node );
+
         DefaultDependencyNode current =
-            new DefaultDependencyNode( parent, artifact, node.getPremanagedVersion(), node.getPremanagedScope(),
+            new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,
                                        getVersionSelectedFromRange( node.getVersionConstraint() ) );
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
