diff --git a/pom.xml b/pom.xml
index d83ea17..7e439d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,4 +77,13 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-artifact</artifactId>
+        <version>2.0.9-SNAPSHOT</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
 </project>
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 97e8daa..c759d78 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
@@ -713,6 +713,12 @@
             appender.append( "scope not updated to ", getFailedUpdateScope() );
         }
         
+        if ( getVersionSelectedFromRange() != null )
+        {
+            appender.append( "version selected from range ", getVersionSelectedFromRange().toString() );
+            appender.append( "available versions ", getAvailableVersions().toString() );
+        }
+        
         switch ( state )
         {
             case INCLUDED:
@@ -762,6 +768,7 @@
 
     /*
      * @see java.lang.Object#hashCode()
+     * @TODO probably better using commons-lang HashCodeBuilder
      */
     public int hashCode()
     {
@@ -780,12 +787,15 @@
         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() );
 
         return hashCode;
     }
 
     /*
      * @see java.lang.Object#equals(java.lang.Object)
+     * @TODO probably better using commons-lang EqualsBuilder
      */
     public boolean equals( Object object )
     {
@@ -808,6 +818,8 @@
             equal &= nullEquals( getPremanagedScope(), node.getPremanagedScope() );
             equal &= nullEquals( getOriginalScope(), node.getOriginalScope() );
             equal &= nullEquals( getFailedUpdateScope(), node.getFailedUpdateScope() );
+            equal &= nullEquals( getVersionSelectedFromRange(), node.getVersionSelectedFromRange() );
+            equal &= nullEquals( getAvailableVersions(), node.getAvailableVersions() );
         }
         else
         {
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java b/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java
index 71ac2d5..cd53415 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilderTest.java
@@ -564,21 +564,25 @@
      * g:p:t:1
      * \- g:a:t:1
      * </pre>
-     * 
-     * @throws DependencyTreeBuilderException
      */
-    public void testProjectWithVersionRange() throws DependencyTreeBuilderException
+    public void testProjectWithVersionRange() throws Exception
     {
+        String range = "[1,2)";
         Artifact projectArtifact = createArtifact( "g:p:t:1" );
-        Artifact childArtifact = createArtifact( "g:a:t:[1,2)" );
+        Artifact childArtifact = createArtifact( "g:a:t:" + range);
 
         MavenProject project = createProject( projectArtifact, new Artifact[] { childArtifact } );
 
-        DependencyNode expectedRootNode = createNode( "g:p:t:1" );
-        expectedRootNode.addChild( createNode( "g:a:t:1.0" ) );
         ArtifactVersion version = new DefaultArtifactVersion( "1.0" );
         List availableVersions = new ArrayList();
         availableVersions.add( version );
+
+        DependencyNode expectedRootNode = createNode( "g:p:t:1" );
+        DependencyNode childNode = createNode( "g:a:t:1.0" );
+        childNode.setAvailableVersions( availableVersions );
+        childNode.setVersionSelectedFromRange( VersionRange.createFromVersionSpec( range ) );
+        expectedRootNode.addChild( childNode );
+
         artifactMetadataSource.addAvailableVersions( childArtifact, availableVersions );
         assertDependencyTree( expectedRootNode, project );
     }
