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 fb9ca32..97e8daa 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
@@ -26,6 +26,7 @@
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
 import org.apache.maven.shared.dependency.tree.traversal.SerializingDependencyNodeVisitor;
 
@@ -189,7 +190,11 @@
      * artifact scope has not been managed.
      */
     private String premanagedScope;
+
+    private VersionRange versionSelectedFromRange;
     
+    private List availableVersions;
+
     // constructors -----------------------------------------------------------
 
     /**
@@ -517,6 +522,40 @@
     }
 
     /**
+     * If the version was selected from a range this method will return the range.
+     * 
+     * @return the version range before a version was selected, or <code>null</code> if the artifact had a explicit
+     *         version.
+     * @since 1.2
+     */
+    public VersionRange getVersionSelectedFromRange()
+    {
+        return versionSelectedFromRange;
+    }
+    
+    public void setVersionSelectedFromRange( VersionRange versionSelectedFromRange )
+    {
+        this.versionSelectedFromRange = versionSelectedFromRange;
+    }
+
+    /**
+     * If the version was selected from a range this method will return the available versions when making the decision.
+     * 
+     * @return {@link List} &lt; {@link String} > the versions available when a version was selected from a range, or
+     *         <code>null</code> if the artifact had a explicit version.
+     * @since 1.2
+     */
+    public List getAvailableVersions()
+    {
+        return availableVersions;
+    }
+    
+    public void setAvailableVersions( List availableVersions )
+    {
+        this.availableVersions = availableVersions;
+    }
+
+    /**
      * Changes the state of this dependency node to be omitted for conflict or duplication, depending on the specified
      * related artifact.
      * 
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 642378c..ec3f629 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
@@ -298,8 +298,19 @@
     public void selectVersionFromRange( Artifact artifact )
     {
         log( "selectVersionFromRange: artifact=" + artifact );
-        
-        // TODO: track version selection from range in node (MNG-3093)
+
+        DependencyNode node = getNode( artifact );
+
+        /*
+         * selectVersionFromRange is called before includeArtifact
+         */
+        if ( node == null && isCurrentNodeIncluded() )
+        {
+            node = addNode( artifact );
+        }
+
+        node.setVersionSelectedFromRange( artifact.getVersionRange() );
+        node.setAvailableVersions( artifact.getAvailableVersions() );
     }
 
     /*
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java b/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java
index 94e5ff5..9f6f122 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/ArtifactMetadataSourceStub.java
@@ -48,6 +48,11 @@
      */
     private final Map resolutionGroupsByArtifact;
 
+    /**
+     * Map of available versions by artifact.
+     */
+    private final Map availableVersionsByArtifact;
+
     // constructors -----------------------------------------------------------
     
     /**
@@ -56,6 +61,7 @@
     public ArtifactMetadataSourceStub()
     {
         resolutionGroupsByArtifact = new HashMap();
+        availableVersionsByArtifact = new HashMap();
     }
 
     // ArtifactMetadataSource methods -----------------------------------------
@@ -85,7 +91,9 @@
     public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
                                            List remoteRepositories ) throws ArtifactMetadataRetrievalException
     {
-        return Collections.EMPTY_LIST;
+        List availableVersions = (List) availableVersionsByArtifact.get( artifact );
+
+        return availableVersions != null ? availableVersions : Collections.EMPTY_LIST;
     }
 
     // public methods ---------------------------------------------------------
@@ -104,4 +112,17 @@
 
         resolutionGroupsByArtifact.put( artifact, resolution );
     }
+
+    /**
+     * Adds versions for the specified artifact to this artifact metadata source stub.
+     * 
+     * @param artifact
+     *            the artifact to add metadata to
+     * @param versions
+     *            the list of versions to register as available for the specified artifact
+     */
+    public void addAvailableVersions( Artifact artifact, List versions )
+    {
+        availableVersionsByArtifact.put( artifact, versions );
+    }
 }
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 dd2c781..71ac2d5 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
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -41,6 +42,9 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ResolutionNode;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.PlexusTestCase;
@@ -552,6 +556,33 @@
         assertDependencyTree( expectedRootNode, project );
     }
 
+    
+    /**
+     * Tests building a tree for a project with a dependency with version range
+     * 
+     * <pre>
+     * g:p:t:1
+     * \- g:a:t:1
+     * </pre>
+     * 
+     * @throws DependencyTreeBuilderException
+     */
+    public void testProjectWithVersionRange() throws DependencyTreeBuilderException
+    {
+        Artifact projectArtifact = createArtifact( "g:p:t:1" );
+        Artifact childArtifact = createArtifact( "g:a:t:[1,2)" );
+
+        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 );
+        artifactMetadataSource.addAvailableVersions( childArtifact, availableVersions );
+        assertDependencyTree( expectedRootNode, project );
+    }
+
     // TODO: reinstate when MNG-3236 fixed
     /*
     public void testProjectWithFilter() throws DependencyTreeBuilderException, ArtifactResolutionException
@@ -593,7 +624,15 @@
         String version = get( tokens, 3 );
         String scope = get( tokens, 4 );
         
-        VersionRange versionRange = VersionRange.createFromVersion( version );
+        VersionRange versionRange;
+        try
+        {
+            versionRange = VersionRange.createFromVersionSpec( version );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            throw new RuntimeException(e);
+        }
 
         return new DefaultArtifact( groupId, artifactId, versionRange, scope, type, null, new DefaultArtifactHandler() );
     }
