removed ArtifactBasicMetadata

git-svn-id: https://svn.apache.org/repos/asf/maven/mercury/trunk@751167 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dep.java b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dep.java
index 7c9f705..1e66e84 100644
--- a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dep.java
+++ b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dep.java
@@ -27,7 +27,6 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -86,7 +85,7 @@
     
     List<String> _exclusions;
 
-    private List<ArtifactBasicMetadata> getDependencies( VirtualRepositoryReader vr )
+    private List<ArtifactMetadata> getDependencies( VirtualRepositoryReader vr )
         throws RepositoryException
     {
         if ( Util.isEmpty( _dependencies ) )
@@ -94,7 +93,7 @@
             return null;
         }
 
-        List<ArtifactBasicMetadata> res = new ArrayList<ArtifactBasicMetadata>( _dependencies.size() );
+        List<ArtifactMetadata> res = new ArrayList<ArtifactMetadata>( _dependencies.size() );
 
         for ( Dependency d : _dependencies )
         {
@@ -135,7 +134,7 @@
 
                 if ( deps != null && !Util.isEmpty( deps.getDependencies() ) )
                 {
-                    for ( ArtifactBasicMetadata bmd : deps.getDependencies() )
+                    for ( ArtifactMetadata bmd : deps.getDependencies() )
                     {
                         res.add( bmd );
                     }
@@ -199,7 +198,7 @@
         
         _pomRepo.setMetadataReader( vr );
 
-        List<ArtifactBasicMetadata> depList = getDependencies( vr );
+        List<ArtifactMetadata> depList = getDependencies( vr );
         
         ArtifactQueryList aql = new ArtifactQueryList( depList );
         
@@ -236,10 +235,10 @@
             return null;
         }
 
-        Map<ArtifactBasicMetadata, List<Artifact>> resMap = aRes.getResults();
+        Map<ArtifactMetadata, List<Artifact>> resMap = aRes.getResults();
 
         int count = 0;
-        for ( ArtifactBasicMetadata key : resMap.keySet() )
+        for ( ArtifactMetadata key : resMap.keySet() )
         {
             List<Artifact> artifacts = resMap.get( key );
             if ( artifacts != null )
@@ -255,7 +254,7 @@
 
         _artifacts = new ArrayList<Artifact>( count );
 
-        for ( ArtifactBasicMetadata key : resMap.keySet() )
+        for ( ArtifactMetadata key : resMap.keySet() )
         {
             List<Artifact> artifacts = resMap.get( key );
 
@@ -291,14 +290,14 @@
      * @param depList
      * @return
      */
-    private List<ArtifactMetadata> toArtifactMetadataList( List<ArtifactBasicMetadata> depList )
+    private List<ArtifactMetadata> toArtifactMetadataList( List<ArtifactMetadata> depList )
     {
         if ( Util.isEmpty( depList ) )
             return null;
 
         List<ArtifactMetadata> res = new ArrayList<ArtifactMetadata>( depList.size() );
 
-        for ( ArtifactBasicMetadata bmd : depList )
+        for ( ArtifactMetadata bmd : depList )
             res.add( new ArtifactMetadata( bmd ) );
 
         return res;
diff --git a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dependency.java b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dependency.java
index 158df9a..5892c63 100644
--- a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dependency.java
+++ b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/Dependency.java
@@ -23,7 +23,7 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.util.Util;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -37,7 +37,7 @@
 {
     private static final Language LANG = new DefaultLanguage( Dependency.class );
 
-    protected ArtifactBasicMetadata _amd;
+    protected ArtifactMetadata _amd;
 
     protected String _pom;
 
@@ -52,7 +52,7 @@
     
     private static long _count = 0L;
     
-    public ArtifactBasicMetadata getMetadata()
+    public ArtifactMetadata getMetadata()
     {
         _amd.setInclusions( getInclusions() );
         
@@ -61,28 +61,28 @@
         return _amd;
     }
     
-    private Collection<ArtifactBasicMetadata> getExclusions()
+    private Collection<ArtifactMetadata> getExclusions()
     {
         if( Util.isEmpty( _exclusions ))
             return null;
         
-        List<ArtifactBasicMetadata> res = new ArrayList<ArtifactBasicMetadata>( _exclusions.size() );
+        List<ArtifactMetadata> res = new ArrayList<ArtifactMetadata>( _exclusions.size() );
         
         for( String name : _exclusions )
-            res.add( new ArtifactBasicMetadata(name) );
+            res.add( new ArtifactMetadata(name) );
         
         return res;
     }
 
-    private Collection<ArtifactBasicMetadata> getInclusions()
+    private Collection<ArtifactMetadata> getInclusions()
     {
         if( Util.isEmpty( _inclusions ))
             return null;
         
-        List<ArtifactBasicMetadata> res = new ArrayList<ArtifactBasicMetadata>( _inclusions.size() );
+        List<ArtifactMetadata> res = new ArrayList<ArtifactMetadata>( _inclusions.size() );
         
         for( String name : _inclusions )
-            res.add( new ArtifactBasicMetadata(name) );
+            res.add( new ArtifactMetadata(name) );
         
         return res;
     }
@@ -92,7 +92,7 @@
         if( _pom != null )
             throw new IllegalArgumentException( LANG.getMessage( "dependency.amd.pom.exists", _pom, name ) );
         
-        _amd = new ArtifactBasicMetadata( name );
+        _amd = new ArtifactMetadata( name );
 
         _amd.setOptional( _optional );
     }
@@ -141,7 +141,7 @@
     {
         if ( _amd == null )
         {
-            _amd = new ArtifactBasicMetadata();
+            _amd = new ArtifactMetadata();
         }
 
         _amd.setGroupId( groupId );
@@ -156,7 +156,7 @@
     {
         if ( _amd == null )
         {
-            _amd = new ArtifactBasicMetadata();
+            _amd = new ArtifactMetadata();
         }
 
         _amd.setArtifactId( artifactId );
@@ -171,7 +171,7 @@
     {
         if ( _amd == null )
         {
-            _amd = new ArtifactBasicMetadata();
+            _amd = new ArtifactMetadata();
         }
 
         _amd.setVersion( version );
diff --git a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/WriteTask.java b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/WriteTask.java
index 0825504..0946835 100644
--- a/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/WriteTask.java
+++ b/mercury-ant-tasks/src/main/java/org/apache/maven/mercury/ant/tasks/WriteTask.java
@@ -25,7 +25,7 @@
 import java.util.Hashtable;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.repository.api.Repository;
 import org.apache.maven.mercury.util.Util;
@@ -165,7 +165,7 @@
 
             if ( !Util.isEmpty( _name ) )
             {
-                a = new DefaultArtifact( new ArtifactBasicMetadata( _name ) );
+                a = new DefaultArtifact( new ArtifactMetadata( _name ) );
 
                 String pomStr =
                     "?xml version='1.0' encoding='UTF-8'?>\n"
diff --git a/mercury-artifact/src/main/ArtifactMetadata.java b/mercury-artifact/src/main/ArtifactMetadata.java
new file mode 100644
index 0000000..d3a5a55
--- /dev/null
+++ b/mercury-artifact/src/main/ArtifactMetadata.java
@@ -0,0 +1,66 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.maven.mercury.artifact;
+
+import java.util.Map;
+
+/**
+ * Artifact Metadata that is resolved independent of Artifact itself. It's built on top of ArtifactBasicMetadata
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ */
+public class ArtifactMetadata
+    extends ArtifactBasicMetadata
+{
+    /**
+     * for testing - required for mock MetadataSource
+     */
+    public ArtifactMetadata()
+    {
+    }
+
+    // ------------------------------------------------------------------
+
+    public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope,
+                             String classifier, String artifactUri, String why, boolean resolved, String error,
+                             Map<String, String> attributes )
+    {
+        this.groupId = groupId;
+        this.artifactId = name;
+        setVersion( version );
+        this.type = type;
+        this.artifactScope = artifactScope;
+        this.classifier = classifier;
+        this.artifactUri = artifactUri;
+        this.attributes = attributes;
+    }
+
+    public ArtifactMetadata( ArtifactBasicMetadata bmd )
+    {
+        this( bmd.getGroupId(), bmd.getArtifactId(), bmd.getVersion(), bmd.getType(), null, bmd.getClassifier(), null,
+              null, true, null, bmd.getAttributes() );
+    }
+
+    public ArtifactMetadata( String gav )
+    {
+        this( new ArtifactBasicMetadata( gav ) );
+    }
+
+}
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java
deleted file mode 100644
index 4ca7107..0000000
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactBasicMetadata.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.maven.mercury.artifact;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
-import org.apache.maven.mercury.artifact.version.VersionException;
-import org.apache.maven.mercury.artifact.version.VersionRange;
-import org.apache.maven.mercury.artifact.version.VersionRangeFactory;
-import org.codehaus.plexus.lang.DefaultLanguage;
-import org.codehaus.plexus.lang.Language;
-
-/**
- * this is the most primitive metadata there is, usually used to query repository for "real" metadata. It holds
- * everything a project.dependencies.dependency element can have
- *
- * @author Oleg Gusakov
- * @version $Id$
- */
-public class ArtifactBasicMetadata
-{
-    public static final String DEFAULT_ARTIFACT_TYPE = "jar";
-
-    private static final Language LANG = new DefaultLanguage( ArtifactBasicMetadata.class );
-
-
-    /**
-     * standard glorified artifact coordinates
-     */
-    protected String groupId;
-
-    protected String artifactId;
-
-    private String version;
-    
-    private transient VersionRange versionRange;
-
-    /**
-     * relocation chain after processing by ProjectBuilder
-     */
-    protected List<ArtifactCoordinates> relocations;
-
-    protected ArtifactCoordinates effectiveCoordinates;
-
-    // This is Maven specific. jvz/
-    protected String classifier;
-
-    protected String type = DEFAULT_ARTIFACT_TYPE;
-
-    protected ArtifactScopeEnum artifactScope;
-
-    protected String scope;
-
-    protected boolean optional;
-
-    protected Collection<ArtifactBasicMetadata> inclusions;
-
-    protected Collection<ArtifactBasicMetadata> exclusions;
-
-    protected Map<String, String> attributes;
-
-    /**
-     * transient helper objects, used by DependencyBuilder.
-     */
-    transient Object tracker;
-
-    transient Boolean local = false;
-
-    // ------------------------------------------------------------------
-    public ArtifactBasicMetadata()
-    {
-    }
-
-    // ------------------------------------------------------------------
-    private void processAttributes( String as )
-    {
-        if ( as == null || as.length() < 1 )
-        {
-            return;
-        }
-
-        String attrString = as.trim();
-
-        if ( attrString == null || attrString.length() < 1 )
-        {
-            return;
-        }
-
-        int fromCh = attrString.indexOf( '{' );
-        int toCh = attrString.indexOf( '}' );
-
-        if ( fromCh != -1 && toCh != -1 )
-        {
-            attrString = attrString.substring( fromCh + 1, toCh );
-        }
-
-        String[] entries = attrString.split( "," );
-
-        if ( entries != null )
-        {
-            for ( int i = 0; i < entries.length; i++ )
-            {
-                String e = entries[i];
-
-                if ( e == null )
-                {
-                    continue;
-                }
-
-                int eq = e.indexOf( '=' );
-
-                if ( eq == -1 )
-                {
-                    continue;
-                }
-
-                if ( attributes == null )
-                {
-                    attributes = new LinkedHashMap<String, String>( entries.length );
-                }
-
-                String name = e.substring( 0, eq );
-
-                if ( name == null )
-                {
-                    continue;
-                }
-
-                name = name.trim();
-
-                String val = e.substring( eq + 1 );
-
-                if ( val != null )
-                {
-                    val = val.trim();
-                }
-
-                attributes.put( name, val );
-            }
-        }
-    }
-
-    // ------------------------------------------------------------------
-    /**
-     * create basic out of <b>group:artifact:version:classifier:type</b> string, use empty string to specify missing
-     * component - for instance query for common-1.3.zip can be specified as ":common:1.3::zip" - note missing groupId
-     * and classifier.
-     */
-    public ArtifactBasicMetadata( String gavQuery )
-    {
-        if ( gavQuery == null )
-        {
-            return;
-        }
-
-        String[] tokens = gavQuery.split( ":" );
-
-        if ( tokens == null || tokens.length < 1 )
-        {
-            return;
-        }
-
-        int count = tokens.length;
-
-        this.groupId = nullify( tokens[0] );
-
-        if ( count > 1 )
-        {
-            this.artifactId = nullify( tokens[1] );
-        }
-
-        if ( count > 2 )
-        {
-            this.version = nullify( tokens[2] );
-        }
-
-        if ( count > 3 )
-        {
-            this.classifier = nullify( tokens[3] );
-        }
-
-        if ( count > 4 )
-        {
-            this.type = nullify( tokens[4] );
-        }
-
-        if ( this.type == null || this.type.length() < 1 )
-        {
-            this.type = DEFAULT_ARTIFACT_TYPE;
-        }
-
-        if ( count > 5 )
-        {
-            this.scope = nullify( tokens[5] );
-        }
-
-        if ( count > 6 )
-        {
-            processAttributes( nullify( tokens[6] ) );
-        }
-    }
-
-    // ------------------------------------------------------------------
-    /**
-     * create basic out of <b>group:artifact:version:classifier:type</b> string, use empty string to specify missing
-     * component - for instance query for common-1.3.zip can be specified as ":common:1.3::zip" - note missing groupId
-     * and classifier.
-     */
-    public static ArtifactBasicMetadata create( String query )
-    {
-        ArtifactBasicMetadata mdq = new ArtifactBasicMetadata( query );
-
-        return mdq;
-    }
-
-    // ---------------------------------------------------------------------------
-    private static final String nullify( String s )
-    {
-        if ( s == null || s.length() < 1 )
-        {
-            return null;
-        }
-        return s;
-    }
-
-    // ---------------------------------------------------------------------
-    public boolean sameGAV( ArtifactBasicMetadata md )
-    {
-        if ( md == null )
-        {
-            return false;
-        }
-
-        return sameGA( md ) && version != null && version.equals( md.getVersion() );
-    }
-
-    // ---------------------------------------------------------------------
-    public boolean sameGA( ArtifactBasicMetadata md )
-    {
-        if ( md == null )
-        {
-            return false;
-        }
-
-        return groupId != null && artifactId != null && groupId.equals( md.getGroupId() )
-            && artifactId.equals( md.getArtifactId() );
-    }
-
-    public String getGA()
-    {
-        return toDomainString();
-    }
-
-    public String getGAV()
-    {
-        return toString();
-    }
-
-    private static final String nvl( String val, String dflt )
-    {
-        return val == null ? dflt : val;
-    }
-
-    private static final String nvl( String val )
-    {
-        return nvl( val, "" );
-    }
-
-    @Override
-    public String toString()
-    {
-        return nvl( groupId ) + ":" + nvl( artifactId ) + ":" + nvl( version ) + ":" + nvl( classifier ) + ":"
-            + nvl( type, DEFAULT_ARTIFACT_TYPE );
-    }
-
-    public String toScopedString()
-    {
-        return toString() + "-scope:" + getArtifactScope();
-    }
-
-    public String toDomainString()
-    {
-        return groupId + ":" + artifactId;
-    }
-
-    public String toManagementString()
-    {
-        return groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
-    }
-
-    public String getBaseName()
-    {
-        return artifactId + "-" + version + ( classifier == null ? "" : "-" + classifier );
-    }
-
-    public String getFileName()
-    {
-        return getBaseName() + "." + ( type == null ? DEFAULT_ARTIFACT_TYPE : type );
-    }
-
-    public String getBaseName( String classifier )
-    {
-        return artifactId + "-" + version
-            + ( ( classifier == null || classifier.length() < 1 ) ? "" : "-" + classifier );
-    }
-
-    public String getCheckedType()
-    {
-        return type == null ? "jar" : type;
-    }
-
-    // ---------------------------------------------------------------------------
-    public String getGroupId()
-    {
-        return groupId;
-    }
-
-    public void setGroupId( String groupId )
-    {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    public void setArtifactId( String artifactId )
-    {
-        this.artifactId = artifactId;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public boolean hasVersion()
-    {
-        return version != null && version.length() > 0;
-    }
-
-    public void setVersion( String version )
-    {
-        this.version = version;
-    }
-    
-    private void checkRangeExists()
-    {
-        if( versionRange == null )
-        {
-            if( version == null )
-                throw new IllegalArgumentException( LANG.getMessage( "artifact.metadata.no.version", toString() ) );
-            else
-            {
-                try
-                {
-                    versionRange = VersionRangeFactory.create( version );
-                }
-                catch ( VersionException e )
-                {
-                    throw new IllegalArgumentException( e.getMessage() );
-                }
-            }
-        }
-    }
-
-    public boolean isSingleton()
-    {
-        checkRangeExists();
-        
-        return versionRange.isSingleton();
-    }
-
-    public boolean isRange()
-    {
-        return !isSingleton();
-    }
-
-    public String getClassifier()
-    {
-        return classifier;
-    }
-
-    public void setClassifier( String classifier )
-    {
-        this.classifier = classifier;
-    }
-
-    public String getType()
-    {
-        return type;
-    }
-
-    public void setType( String type )
-    {
-        this.type = type;
-    }
-
-    public Map<String, String> getAttributes()
-    {
-        return attributes;
-    }
-
-    public String getScope()
-    {
-        return getArtifactScope().getScope();
-    }
-
-    public ArtifactScopeEnum getScopeAsEnum()
-    {
-        return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
-    }
-
-    public ArtifactScopeEnum getArtifactScope()
-    {
-        return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
-    }
-
-    public void setArtifactScope( ArtifactScopeEnum artifactScope )
-    {
-        this.artifactScope = artifactScope;
-    }
-
-    public void setScope( String scope )
-    {
-        this.artifactScope = scope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : ArtifactScopeEnum.valueOf( scope );
-    }
-
-    public boolean isOptional()
-    {
-        return optional;
-    }
-
-    public void setOptional( boolean optional )
-    {
-        this.optional = optional;
-    }
-
-    public void setOptional( String optional )
-    {
-        this.optional = "true".equals( optional );
-    }
-
-    public Object getTracker()
-    {
-        return tracker;
-    }
-
-    public void setTracker( Object tracker )
-    {
-        this.tracker = tracker;
-    }
-
-    public boolean hasClassifier()
-    {
-        return classifier != null && classifier.length() > 0;
-    }
-
-    public Boolean isLocal()
-    {
-        return local;
-    }
-
-    public void setLocal( Boolean local )
-    {
-        this.local = local;
-    }
-
-    public boolean isVirtual()
-    {
-        return DefaultArtifactVersion.isVirtual( version );
-    }
-
-    public ArtifactCoordinates getEffectiveCoordinates()
-    {
-        if ( relocations == null || relocations.isEmpty() )
-        {
-            return new ArtifactCoordinates( groupId, artifactId, version );
-        }
-
-        return relocations.get( relocations.size() - 1 );
-    }
-
-    public ArtifactBasicMetadata addRelocation( ArtifactCoordinates coord )
-    {
-        if ( coord == null )
-        {
-            return this;
-        }
-
-        if ( relocations == null )
-        {
-            relocations = new ArrayList<ArtifactCoordinates>( 2 );
-        }
-
-        if ( coord.getGroupId() == null )
-        {
-            coord.setGroupId( groupId );
-        }
-
-        if ( coord.getArtifactId() == null )
-        {
-            coord.setArtifactId( artifactId );
-        }
-
-        if ( coord.getVersion() == null )
-        {
-            coord.setVersion( version );
-        }
-
-        relocations.add( coord );
-        effectiveCoordinates = coord;
-
-        return this;
-    }
-
-    public String getEffectiveGroupId()
-    {
-        return effectiveCoordinates == null ? groupId : effectiveCoordinates.getGroupId();
-    }
-
-    public String getEffectiveArtifactId()
-    {
-        return effectiveCoordinates == null ? artifactId : effectiveCoordinates.getArtifactId();
-    }
-
-    public String getEffectiveersion()
-    {
-        return effectiveCoordinates == null ? version : effectiveCoordinates.getVersion();
-    }
-
-    public boolean hasInclusions()
-    {
-        return inclusions == null ? false : !inclusions.isEmpty();
-    }
-
-    public Collection<ArtifactBasicMetadata> getInclusions()
-    {
-        return inclusions;
-    }
-
-    public void setInclusions( Collection<ArtifactBasicMetadata> inclusions )
-    {
-        this.inclusions = inclusions;
-    }
-
-    public boolean hasExclusions()
-    {
-        return exclusions == null ? false : !exclusions.isEmpty();
-    }
-
-    public Collection<ArtifactBasicMetadata> getExclusions()
-    {
-        return exclusions;
-    }
-
-    public void setExclusions( Collection<ArtifactBasicMetadata> exclusions )
-    {
-        this.exclusions = exclusions;
-    }
-
-    /**
-     * run dependency through inclusion/exclusion filters. Inclusion filter is always a "hole"-filter, which is then
-     * enhanced by exclusion "cork"-filter
-     *
-     * @param dep dependency to vet
-     * @return vet result
-     * @throws VersionException
-     */
-    public boolean allowDependency( ArtifactBasicMetadata dep )
-        throws VersionException
-    {
-        boolean includeDependency = true;
-        if ( hasInclusions() )
-        {
-            includeDependency = !passesFilter( inclusions, dep );
-        }
-
-        if ( !includeDependency )
-        {
-            return false;
-        }
-
-        if ( !hasExclusions() )
-        {
-            return true;
-        }
-
-        if ( passesFilter( exclusions, dep ) )
-        {
-            return true;
-        }
-
-        return false;
-
-    }
-
-    private boolean passesFilter( Collection<ArtifactBasicMetadata> filter, ArtifactBasicMetadata dep )
-        throws VersionException
-    {
-        for ( ArtifactBasicMetadata filterMd : filter )
-        {
-            if ( filterMd.sameGA( dep ) )
-            {
-                if ( !filterMd.hasVersion() )
-                {
-                    return false; // no version in the filter - catch by GA
-                }
-                VersionRange vr = VersionRangeFactory.create( filterMd.getVersion() );
-                if ( vr.includes( dep.getVersion() ) )
-                {
-                    return false; // catch by version query
-                }
-            }
-        }
-
-        return true;
-    }
-
-    @Override
-    public boolean equals( Object obj )
-    {
-        if ( obj == null || !( obj instanceof ArtifactBasicMetadata ) )
-        {
-            return false;
-        }
-
-        return toString().equals( obj.toString() );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return toString().hashCode();
-    }
-
-    // ---------------------------------------------------------------------------
-    // ---------------------------------------------------------------------------
-}
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactExclusionList.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactExclusionList.java
index 3f058f6..4ee5989 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactExclusionList.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactExclusionList.java
@@ -31,7 +31,7 @@
     /**
      * @param md
      */
-    public ArtifactExclusionList( ArtifactBasicMetadata... md )
+    public ArtifactExclusionList( ArtifactMetadata... md )
     {
         super( md );
     }
@@ -39,7 +39,7 @@
     /**
      * @param md
      */
-    public ArtifactExclusionList( Collection<ArtifactBasicMetadata> md )
+    public ArtifactExclusionList( Collection<ArtifactMetadata> md )
     {
         super( md );
     }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactInclusionList.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactInclusionList.java
index 5491375..c4d929e 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactInclusionList.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactInclusionList.java
@@ -31,7 +31,7 @@
     /**
      * @param md
      */
-    public ArtifactInclusionList( ArtifactBasicMetadata... md )
+    public ArtifactInclusionList( ArtifactMetadata... md )
     {
         super( md );
     }
@@ -39,7 +39,7 @@
     /**
      * @param md
      */
-    public ArtifactInclusionList( Collection<ArtifactBasicMetadata> md )
+    public ArtifactInclusionList( Collection<ArtifactMetadata> md )
     {
         super( md );
     }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java
index 93c22e1..c606649 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadata.java
@@ -18,68 +18,686 @@
  */
 package org.apache.maven.mercury.artifact;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
+import org.apache.maven.mercury.artifact.version.VersionException;
+import org.apache.maven.mercury.artifact.version.VersionRange;
+import org.apache.maven.mercury.artifact.version.VersionRangeFactory;
+import org.codehaus.plexus.lang.DefaultLanguage;
+import org.codehaus.plexus.lang.Language;
+
 /**
- * Artifact Metadata that is resolved independent of Artifact itself. It's built on top of ArtifactBasicMetadata
+ * this is the most primitive metadata there is, usually used to query repository for "real" metadata. It holds
+ * everything a project.dependencies.dependency element can have
  *
  * @author Oleg Gusakov
  * @version $Id$
  */
 public class ArtifactMetadata
-    extends ArtifactBasicMetadata
 {
+    public static final String DEFAULT_ARTIFACT_TYPE = "jar";
+
+    private static final Language LANG = new DefaultLanguage( ArtifactMetadata.class );
+
+
+    /**
+     * standard glorified artifact coordinates
+     */
+    protected String groupId;
+
+    protected String artifactId;
+
+    private String version;
+    
+    private transient VersionRange versionRange;
+
+    /**
+     * relocation chain after processing by ProjectBuilder
+     */
+    protected List<ArtifactCoordinates> relocations;
+
+    protected ArtifactCoordinates effectiveCoordinates;
+
+    // This is Maven specific. jvz/
+    protected String classifier;
+
+    protected String type = DEFAULT_ARTIFACT_TYPE;
+
+    protected ArtifactScopeEnum artifactScope;
+
+    protected String scope;
+
+    protected boolean optional;
+
+    protected Collection<ArtifactMetadata> inclusions;
+
+    protected Collection<ArtifactMetadata> exclusions;
+
+    protected Map<String, String> attributes;
+
+    /**
+     * transient helper objects, used by DependencyBuilder.
+     */
+    transient Object tracker;
+
+    transient Boolean local = false;
+
     /** dependencies of the artifact behind this metadata */
-    protected List<ArtifactBasicMetadata> dependencies;
+    protected List<ArtifactMetadata> dependencies;
 
     /** artifact URI */
     protected String artifactUri;
 
-    /**
-     * for testing - required for mock MetadataSource
-     */
+    // ------------------------------------------------------------------
     public ArtifactMetadata()
     {
     }
 
     // ------------------------------------------------------------------
+    private void processAttributes( String as )
+    {
+        if ( as == null || as.length() < 1 )
+        {
+            return;
+        }
 
-    public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope,
-                             String classifier, String artifactUri, String why, boolean resolved, String error,
-                             Map<String, String> attributes )
+        String attrString = as.trim();
+
+        if ( attrString == null || attrString.length() < 1 )
+        {
+            return;
+        }
+
+        int fromCh = attrString.indexOf( '{' );
+        int toCh = attrString.indexOf( '}' );
+
+        if ( fromCh != -1 && toCh != -1 )
+        {
+            attrString = attrString.substring( fromCh + 1, toCh );
+        }
+
+        String[] entries = attrString.split( "," );
+
+        if ( entries != null )
+        {
+            for ( int i = 0; i < entries.length; i++ )
+            {
+                String e = entries[i];
+
+                if ( e == null )
+                {
+                    continue;
+                }
+
+                int eq = e.indexOf( '=' );
+
+                if ( eq == -1 )
+                {
+                    continue;
+                }
+
+                if ( attributes == null )
+                {
+                    attributes = new LinkedHashMap<String, String>( entries.length );
+                }
+
+                String name = e.substring( 0, eq );
+
+                if ( name == null )
+                {
+                    continue;
+                }
+
+                name = name.trim();
+
+                String val = e.substring( eq + 1 );
+
+                if ( val != null )
+                {
+                    val = val.trim();
+                }
+
+                attributes.put( name, val );
+            }
+        }
+    }
+
+    // ------------------------------------------------------------------
+    /**
+     * create basic out of <b>group:artifact:version:classifier:type</b> string, use empty string to specify missing
+     * component - for instance query for common-1.3.zip can be specified as ":common:1.3::zip" - note missing groupId
+     * and classifier.
+     */
+    public ArtifactMetadata( String gavQuery )
+    {
+        if ( gavQuery == null )
+        {
+            return;
+        }
+
+        String[] tokens = gavQuery.split( ":" );
+
+        if ( tokens == null || tokens.length < 1 )
+        {
+            return;
+        }
+
+        int count = tokens.length;
+
+        this.groupId = nullify( tokens[0] );
+
+        if ( count > 1 )
+        {
+            this.artifactId = nullify( tokens[1] );
+        }
+
+        if ( count > 2 )
+        {
+            this.version = nullify( tokens[2] );
+        }
+
+        if ( count > 3 )
+        {
+            this.classifier = nullify( tokens[3] );
+        }
+
+        if ( count > 4 )
+        {
+            this.type = nullify( tokens[4] );
+        }
+
+        if ( this.type == null || this.type.length() < 1 )
+        {
+            this.type = DEFAULT_ARTIFACT_TYPE;
+        }
+
+        if ( count > 5 )
+        {
+            this.scope = nullify( tokens[5] );
+        }
+
+        if ( count > 6 )
+        {
+            processAttributes( nullify( tokens[6] ) );
+        }
+    }
+    
+    /**
+     * copy constructor
+     * 
+     * @param copyFrom
+     */
+    public ArtifactMetadata( ArtifactMetadata copyFrom )
+    {
+        if( copyFrom == null )
+            throw new IllegalArgumentException( LANG.getMessage( "null.copy.from.md") );
+
+       setGroupId( copyFrom.getGroupId() );
+       setArtifactId( copyFrom.getArtifactId() );
+       setVersion( copyFrom.getVersion() );
+       setClassifier( copyFrom.getClassifier() );
+       setType( copyFrom.getType() );
+       setScope( copyFrom.getScope() );
+       
+       Map<String, String> a = copyFrom.getAttributes(); 
+       if(  a != null && a.size() > 0 )
+       {
+           attributes = new HashMap<String, String>( a.size() );
+           
+           attributes.putAll( a );
+       }
+       
+       setTracker( copyFrom.getTracker() );
+       
+    }
+
+    // ------------------------------------------------------------------
+    /**
+     * create basic out of <b>group:artifact:version:classifier:type</b> string, use empty string to specify missing
+     * component - for instance query for common-1.3.zip can be specified as ":common:1.3::zip" - note missing groupId
+     * and classifier.
+     */
+    public static ArtifactMetadata create( String query )
+    {
+        ArtifactMetadata mdq = new ArtifactMetadata( query );
+
+        return mdq;
+    }
+
+    // ---------------------------------------------------------------------------
+    private static final String nullify( String s )
+    {
+        if ( s == null || s.length() < 1 )
+        {
+            return null;
+        }
+        return s;
+    }
+
+    // ---------------------------------------------------------------------
+    public boolean sameGAV( ArtifactMetadata md )
+    {
+        if ( md == null )
+        {
+            return false;
+        }
+
+        return sameGA( md ) && version != null && version.equals( md.getVersion() );
+    }
+
+    // ---------------------------------------------------------------------
+    public boolean sameGA( ArtifactMetadata md )
+    {
+        if ( md == null )
+        {
+            return false;
+        }
+
+        return groupId != null && artifactId != null && groupId.equals( md.getGroupId() )
+            && artifactId.equals( md.getArtifactId() );
+    }
+
+    public String getGA()
+    {
+        return toDomainString();
+    }
+
+    public String getGAV()
+    {
+        return toString();
+    }
+
+    private static final String nvl( String val, String dflt )
+    {
+        return val == null ? dflt : val;
+    }
+
+    private static final String nvl( String val )
+    {
+        return nvl( val, "" );
+    }
+
+    @Override
+    public String toString()
+    {
+        return nvl( groupId ) + ":" + nvl( artifactId ) + ":" + nvl( version ) + ":" + nvl( classifier ) + ":"
+            + nvl( type, DEFAULT_ARTIFACT_TYPE );
+    }
+
+    public String toScopedString()
+    {
+        return toString() + "-scope:" + getArtifactScope();
+    }
+
+    public String toDomainString()
+    {
+        return groupId + ":" + artifactId;
+    }
+
+    public String toManagementString()
+    {
+        return groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
+    }
+
+    public String getBaseName()
+    {
+        return artifactId + "-" + version + ( classifier == null ? "" : "-" + classifier );
+    }
+
+    public String getFileName()
+    {
+        return getBaseName() + "." + ( type == null ? DEFAULT_ARTIFACT_TYPE : type );
+    }
+
+    public String getBaseName( String classifier )
+    {
+        return artifactId + "-" + version
+            + ( ( classifier == null || classifier.length() < 1 ) ? "" : "-" + classifier );
+    }
+
+    public String getCheckedType()
+    {
+        return type == null ? "jar" : type;
+    }
+
+    // ---------------------------------------------------------------------------
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public void setGroupId( String groupId )
     {
         this.groupId = groupId;
-        this.artifactId = name;
-        setVersion( version );
-        this.type = type;
-        this.artifactScope = artifactScope;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public boolean hasVersion()
+    {
+        return version != null && version.length() > 0;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+    
+    private void checkRangeExists()
+    {
+        if( versionRange == null )
+        {
+            if( version == null )
+                throw new IllegalArgumentException( LANG.getMessage( "artifact.metadata.no.version", toString() ) );
+            else
+            {
+                try
+                {
+                    versionRange = VersionRangeFactory.create( version );
+                }
+                catch ( VersionException e )
+                {
+                    throw new IllegalArgumentException( e.getMessage() );
+                }
+            }
+        }
+    }
+
+    public boolean isSingleton()
+    {
+        checkRangeExists();
+        
+        return versionRange.isSingleton();
+    }
+
+    public boolean isRange()
+    {
+        return !isSingleton();
+    }
+
+    public String getClassifier()
+    {
+        return classifier;
+    }
+
+    public void setClassifier( String classifier )
+    {
         this.classifier = classifier;
-        this.artifactUri = artifactUri;
-        this.attributes = attributes;
     }
 
-    public ArtifactMetadata( ArtifactBasicMetadata bmd )
+    public String getType()
     {
-        this( bmd.getGroupId(), bmd.getArtifactId(), bmd.getVersion(), bmd.getType(), null, bmd.getClassifier(), null,
-              null, true, null, bmd.getAttributes() );
+        return type;
     }
 
-    public ArtifactMetadata( Artifact af )
+    public void setType( String type )
     {
+        this.type = type;
     }
 
-    public ArtifactMetadata( String gav )
+    public Map<String, String> getAttributes()
     {
-        this( new ArtifactBasicMetadata( gav ) );
+        return attributes;
     }
 
-    public List<ArtifactBasicMetadata> getDependencies()
+    public String getScope()
+    {
+        return getArtifactScope().getScope();
+    }
+
+    public ArtifactScopeEnum getScopeAsEnum()
+    {
+        return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
+    }
+
+    public ArtifactScopeEnum getArtifactScope()
+    {
+        return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
+    }
+
+    public void setArtifactScope( ArtifactScopeEnum artifactScope )
+    {
+        this.artifactScope = artifactScope;
+    }
+
+    public void setScope( String scope )
+    {
+        this.artifactScope = scope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : ArtifactScopeEnum.valueOf( scope );
+    }
+
+    public boolean isOptional()
+    {
+        return optional;
+    }
+
+    public void setOptional( boolean optional )
+    {
+        this.optional = optional;
+    }
+
+    public void setOptional( String optional )
+    {
+        this.optional = "true".equals( optional );
+    }
+
+    public Object getTracker()
+    {
+        return tracker;
+    }
+
+    public void setTracker( Object tracker )
+    {
+        this.tracker = tracker;
+    }
+
+    public boolean hasClassifier()
+    {
+        return classifier != null && classifier.length() > 0;
+    }
+
+    public Boolean isLocal()
+    {
+        return local;
+    }
+
+    public void setLocal( Boolean local )
+    {
+        this.local = local;
+    }
+
+    public boolean isVirtual()
+    {
+        return DefaultArtifactVersion.isVirtual( version );
+    }
+
+    public ArtifactCoordinates getEffectiveCoordinates()
+    {
+        if ( relocations == null || relocations.isEmpty() )
+        {
+            return new ArtifactCoordinates( groupId, artifactId, version );
+        }
+
+        return relocations.get( relocations.size() - 1 );
+    }
+
+    public ArtifactMetadata addRelocation( ArtifactCoordinates coord )
+    {
+        if ( coord == null )
+        {
+            return this;
+        }
+
+        if ( relocations == null )
+        {
+            relocations = new ArrayList<ArtifactCoordinates>( 2 );
+        }
+
+        if ( coord.getGroupId() == null )
+        {
+            coord.setGroupId( groupId );
+        }
+
+        if ( coord.getArtifactId() == null )
+        {
+            coord.setArtifactId( artifactId );
+        }
+
+        if ( coord.getVersion() == null )
+        {
+            coord.setVersion( version );
+        }
+
+        relocations.add( coord );
+        effectiveCoordinates = coord;
+
+        return this;
+    }
+
+    public String getEffectiveGroupId()
+    {
+        return effectiveCoordinates == null ? groupId : effectiveCoordinates.getGroupId();
+    }
+
+    public String getEffectiveArtifactId()
+    {
+        return effectiveCoordinates == null ? artifactId : effectiveCoordinates.getArtifactId();
+    }
+
+    public String getEffectiveersion()
+    {
+        return effectiveCoordinates == null ? version : effectiveCoordinates.getVersion();
+    }
+
+    public boolean hasInclusions()
+    {
+        return inclusions == null ? false : !inclusions.isEmpty();
+    }
+
+    public Collection<ArtifactMetadata> getInclusions()
+    {
+        return inclusions;
+    }
+
+    public void setInclusions( Collection<ArtifactMetadata> inclusions )
+    {
+        this.inclusions = inclusions;
+    }
+
+    public boolean hasExclusions()
+    {
+        return exclusions == null ? false : !exclusions.isEmpty();
+    }
+
+    public Collection<ArtifactMetadata> getExclusions()
+    {
+        return exclusions;
+    }
+
+    public void setExclusions( Collection<ArtifactMetadata> exclusions )
+    {
+        this.exclusions = exclusions;
+    }
+
+    /**
+     * run dependency through inclusion/exclusion filters. Inclusion filter is always a "hole"-filter, which is then
+     * enhanced by exclusion "cork"-filter
+     *
+     * @param dep dependency to vet
+     * @return vet result
+     * @throws VersionException
+     */
+    public boolean allowDependency( ArtifactMetadata dep )
+        throws VersionException
+    {
+        boolean includeDependency = true;
+        if ( hasInclusions() )
+        {
+            includeDependency = !passesFilter( inclusions, dep );
+        }
+
+        if ( !includeDependency )
+        {
+            return false;
+        }
+
+        if ( !hasExclusions() )
+        {
+            return true;
+        }
+
+        if ( passesFilter( exclusions, dep ) )
+        {
+            return true;
+        }
+
+        return false;
+
+    }
+
+    private boolean passesFilter( Collection<ArtifactMetadata> filter, ArtifactMetadata dep )
+        throws VersionException
+    {
+        for ( ArtifactMetadata filterMd : filter )
+        {
+            if ( filterMd.sameGA( dep ) )
+            {
+                if ( !filterMd.hasVersion() )
+                {
+                    return false; // no version in the filter - catch by GA
+                }
+                VersionRange vr = VersionRangeFactory.create( filterMd.getVersion() );
+                if ( vr.includes( dep.getVersion() ) )
+                {
+                    return false; // catch by version query
+                }
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( obj == null || !( obj instanceof ArtifactMetadata ) )
+        {
+            return false;
+        }
+
+        return toString().equals( obj.toString() );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return toString().hashCode();
+    }
+
+    public List<ArtifactMetadata> getDependencies()
     {
         return dependencies;
     }
 
-    public void setDependencies( List<ArtifactBasicMetadata> dependencies )
+    public void setDependencies( List<ArtifactMetadata> dependencies )
     {
         this.dependencies = dependencies;
     }
@@ -94,4 +712,6 @@
         this.artifactUri = artifactUri;
     }
 
+    // ---------------------------------------------------------------------------
+    // ---------------------------------------------------------------------------
 }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadataList.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadataList.java
index 33972c9..f17baac 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadataList.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactMetadataList.java
@@ -28,15 +28,15 @@
  */
 public abstract class ArtifactMetadataList
 {
-    List<ArtifactBasicMetadata> _artifacts = new ArrayList<ArtifactBasicMetadata>( 8 );
+    List<ArtifactMetadata> _artifacts = new ArrayList<ArtifactMetadata>( 8 );
 
-    public ArtifactMetadataList( ArtifactBasicMetadata... md )
+    public ArtifactMetadataList( ArtifactMetadata... md )
     {
-        for ( ArtifactBasicMetadata m : md )
+        for ( ArtifactMetadata m : md )
             add( m );
     }
 
-    public ArtifactMetadataList( Collection<ArtifactBasicMetadata> md )
+    public ArtifactMetadataList( Collection<ArtifactMetadata> md )
     {
         add( md );
     }
@@ -44,33 +44,33 @@
     public ArtifactMetadataList( String... mds )
     {
         for ( String m : mds )
-            add( new ArtifactBasicMetadata( m ) );
+            add( new ArtifactMetadata( m ) );
     }
 
-    public void add( ArtifactBasicMetadata md )
+    public void add( ArtifactMetadata md )
     {
         _artifacts.add( md );
     }
 
-    public void add( Collection<ArtifactBasicMetadata> md )
+    public void add( Collection<ArtifactMetadata> md )
     {
         _artifacts.addAll( md );
     }
 
     public void addGav( String md )
     {
-        _artifacts.add( new ArtifactBasicMetadata( md ) );
+        _artifacts.add( new ArtifactMetadata( md ) );
     }
 
     public void addByGav( Collection<String> mds )
     {
         for ( String m : mds )
         {
-            _artifacts.add( new ArtifactBasicMetadata( m ) );
+            _artifacts.add( new ArtifactMetadata( m ) );
         }
     }
 
-    public List<ArtifactBasicMetadata> getMetadataList()
+    public List<ArtifactMetadata> getMetadataList()
     {
         return _artifacts;
     }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactQueryList.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactQueryList.java
index 8857fb8..487b0e1 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactQueryList.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactQueryList.java
@@ -31,7 +31,7 @@
     /**
      * @param md
      */
-    public ArtifactQueryList( ArtifactBasicMetadata... md )
+    public ArtifactQueryList( ArtifactMetadata... md )
     {
         super( md );
     }
@@ -39,7 +39,7 @@
     /**
      * @param md
      */
-    public ArtifactQueryList( Collection<ArtifactBasicMetadata> md )
+    public ArtifactQueryList( Collection<ArtifactMetadata> md )
     {
         super( md );
     }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java
index fee4141..17face3 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/DefaultArtifact.java
@@ -36,18 +36,7 @@
 
     private byte[] pomBlob;
 
-    public DefaultArtifact( String groupId, String artifactId, String version, String type, String classifier,
-                            boolean optional, String scope, String inheritedScope )
-    {
-        if ( version == null )
-        {
-            throw new IllegalArgumentException( "Version cannot be null." );
-        }
-
-        initialize( groupId, artifactId, version, type, classifier, optional, scope, inheritedScope );
-    }
-
-    public DefaultArtifact( ArtifactBasicMetadata bmd )
+    public DefaultArtifact( ArtifactMetadata bmd )
     {
         if ( bmd.getVersion() == null )
         {
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties
index 0305f64..1f77730 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties
@@ -18,3 +18,4 @@
 #
 
 artifact.metadata.no.version=no version in this metadata: {0}
+null.copy.from.md=cannot create a copy of a null metadata
\ No newline at end of file
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ArtifactListProcessor.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ArtifactListProcessor.java
index 0a37001..86e7229 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ArtifactListProcessor.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ArtifactListProcessor.java
@@ -21,7 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  * generic interface to be implemented by helper components
@@ -54,6 +54,6 @@
      *
      * @throws ArtifactListProcessorException
      */
-    public List<ArtifactBasicMetadata> process( List<ArtifactBasicMetadata> artifacts )
+    public List<ArtifactMetadata> process( List<ArtifactMetadata> artifacts )
         throws ArtifactListProcessorException;
 }
diff --git a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MetadataVersionComparator.java b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MetadataVersionComparator.java
index bee6677..079e3c8 100644
--- a/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MetadataVersionComparator.java
+++ b/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MetadataVersionComparator.java
@@ -20,7 +20,7 @@
 
 import java.util.Comparator;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
 
@@ -31,11 +31,11 @@
  * @version $Id$
  */
 public class MetadataVersionComparator
-    implements Comparator<ArtifactBasicMetadata>
+    implements Comparator<ArtifactMetadata>
 {
     private static final Language _lang = new DefaultLanguage( MetadataVersionComparator.class );
 
-    public int compare( ArtifactBasicMetadata v1, ArtifactBasicMetadata v2 )
+    public int compare( ArtifactMetadata v1, ArtifactMetadata v2 )
     {
         if ( v1 == null || v2 == null )
         {
diff --git a/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java b/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java
index a513125..9336fad 100644
--- a/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java
+++ b/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/DependencyFilterTest.java
@@ -31,34 +31,34 @@
 public class DependencyFilterTest
     extends TestCase
 {
-    ArtifactBasicMetadata a1;
+    ArtifactMetadata a1;
 
-    ArtifactBasicMetadata a2;
+    ArtifactMetadata a2;
 
-    ArtifactBasicMetadata a3;
+    ArtifactMetadata a3;
 
-    ArtifactBasicMetadata a4;
+    ArtifactMetadata a4;
 
-    ArrayList<ArtifactBasicMetadata> inc;
+    ArrayList<ArtifactMetadata> inc;
 
-    ArrayList<ArtifactBasicMetadata> exc;
+    ArrayList<ArtifactMetadata> exc;
 
     @Override
     protected void setUp()
         throws Exception
     {
-        a1 = new ArtifactBasicMetadata( "a:a:1.1" );
-        a2 = new ArtifactBasicMetadata( "a:a:2.1" );
-        a3 = new ArtifactBasicMetadata( "a:a:3.1" );
-        a4 = new ArtifactBasicMetadata( "a:a:4.1" );
+        a1 = new ArtifactMetadata( "a:a:1.1" );
+        a2 = new ArtifactMetadata( "a:a:2.1" );
+        a3 = new ArtifactMetadata( "a:a:3.1" );
+        a4 = new ArtifactMetadata( "a:a:4.1" );
 
-        inc = new ArrayList<ArtifactBasicMetadata>();
-        inc.add( new ArtifactBasicMetadata( "a:a" ) );
-        inc.add( new ArtifactBasicMetadata( "b:b:2.0.0" ) );
+        inc = new ArrayList<ArtifactMetadata>();
+        inc.add( new ArtifactMetadata( "a:a" ) );
+        inc.add( new ArtifactMetadata( "b:b:2.0.0" ) );
 
-        exc = new ArrayList<ArtifactBasicMetadata>();
-        exc.add( new ArtifactBasicMetadata( "c:c" ) );
-        exc.add( new ArtifactBasicMetadata( "b:b:2.0.1" ) );
+        exc = new ArrayList<ArtifactMetadata>();
+        exc.add( new ArtifactMetadata( "c:c" ) );
+        exc.add( new ArtifactMetadata( "b:b:2.0.1" ) );
 
         a2.setInclusions( inc );
 
@@ -71,39 +71,39 @@
     public void testNoFilter()
         throws VersionException
     {
-        assertTrue( a1.allowDependency( new ArtifactBasicMetadata( "a:a:2.0.0" ) ) );
-        assertTrue( a1.allowDependency( new ArtifactBasicMetadata( "b:b:1.0.0" ) ) );
-        assertTrue( a1.allowDependency( new ArtifactBasicMetadata( "c:c:1.0.0" ) ) );
+        assertTrue( a1.allowDependency( new ArtifactMetadata( "a:a:2.0.0" ) ) );
+        assertTrue( a1.allowDependency( new ArtifactMetadata( "b:b:1.0.0" ) ) );
+        assertTrue( a1.allowDependency( new ArtifactMetadata( "c:c:1.0.0" ) ) );
     }
 
     public void testInclusionsFilter()
         throws VersionException
     {
-        assertTrue( a2.allowDependency( new ArtifactBasicMetadata( "a:a:2.0.0" ) ) );
-        assertFalse( a2.allowDependency( new ArtifactBasicMetadata( "b:b:1.0.0" ) ) );
-        assertTrue( a2.allowDependency( new ArtifactBasicMetadata( "b:b:2.0.0" ) ) );
-        assertFalse( a2.allowDependency( new ArtifactBasicMetadata( "b:b:2.0.1" ) ) );
-        assertFalse( a2.allowDependency( new ArtifactBasicMetadata( "c:c:1.0.0" ) ) );
+        assertTrue( a2.allowDependency( new ArtifactMetadata( "a:a:2.0.0" ) ) );
+        assertFalse( a2.allowDependency( new ArtifactMetadata( "b:b:1.0.0" ) ) );
+        assertTrue( a2.allowDependency( new ArtifactMetadata( "b:b:2.0.0" ) ) );
+        assertFalse( a2.allowDependency( new ArtifactMetadata( "b:b:2.0.1" ) ) );
+        assertFalse( a2.allowDependency( new ArtifactMetadata( "c:c:1.0.0" ) ) );
     }
 
     public void testExclusionsFilter()
         throws VersionException
     {
-        assertTrue( a3.allowDependency( new ArtifactBasicMetadata( "a:a:2.0.0" ) ) );
-        assertTrue( a3.allowDependency( new ArtifactBasicMetadata( "b:b:1.0.0" ) ) );
-        assertFalse( a3.allowDependency( new ArtifactBasicMetadata( "b:b:2.0.1" ) ) );
-        assertFalse( a3.allowDependency( new ArtifactBasicMetadata( "c:c:1.0.0" ) ) );
+        assertTrue( a3.allowDependency( new ArtifactMetadata( "a:a:2.0.0" ) ) );
+        assertTrue( a3.allowDependency( new ArtifactMetadata( "b:b:1.0.0" ) ) );
+        assertFalse( a3.allowDependency( new ArtifactMetadata( "b:b:2.0.1" ) ) );
+        assertFalse( a3.allowDependency( new ArtifactMetadata( "c:c:1.0.0" ) ) );
     }
 
     public void testInclusionsExclusionsFilter()
         throws VersionException
     {
-        assertTrue( a4.allowDependency( new ArtifactBasicMetadata( "a:a:2.0.0" ) ) );
-        assertFalse( a4.allowDependency( new ArtifactBasicMetadata( "b:b:1.0.0" ) ) );
-        assertTrue( a4.allowDependency( new ArtifactBasicMetadata( "b:b:2.0.0" ) ) );
-        assertFalse( a4.allowDependency( new ArtifactBasicMetadata( "b:b:2.0.1" ) ) );
-        assertFalse( a4.allowDependency( new ArtifactBasicMetadata( "b:b:3.0.1" ) ) );
-        assertFalse( a4.allowDependency( new ArtifactBasicMetadata( "c:c:1.0.0" ) ) );
+        assertTrue( a4.allowDependency( new ArtifactMetadata( "a:a:2.0.0" ) ) );
+        assertFalse( a4.allowDependency( new ArtifactMetadata( "b:b:1.0.0" ) ) );
+        assertTrue( a4.allowDependency( new ArtifactMetadata( "b:b:2.0.0" ) ) );
+        assertFalse( a4.allowDependency( new ArtifactMetadata( "b:b:2.0.1" ) ) );
+        assertFalse( a4.allowDependency( new ArtifactMetadata( "b:b:3.0.1" ) ) );
+        assertFalse( a4.allowDependency( new ArtifactMetadata( "c:c:1.0.0" ) ) );
     }
 
 }
diff --git a/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/DependencyProcessor.java b/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/DependencyProcessor.java
index c9f9ccb..a8c4e37 100644
--- a/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/DependencyProcessor.java
+++ b/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/DependencyProcessor.java
@@ -21,14 +21,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 public interface DependencyProcessor
 {
 
     public static final DependencyProcessor NULL_PROCESSOR = new DependencyProcessor()
     {
-        public List<ArtifactBasicMetadata> getDependencies( ArtifactBasicMetadata bmd, MetadataReader mdReader,
+        public List<ArtifactMetadata> getDependencies( ArtifactMetadata bmd, MetadataReader mdReader,
                                                             Map<String, String> env, Map<?, ?> sysProps )
             throws MetadataReaderException, DependencyProcessorException
         {
@@ -37,7 +37,7 @@
     };
 
     // TODO: shouldn't sysProps be changed to Properties because of System.getProperties() API?
-    public List<ArtifactBasicMetadata> getDependencies( ArtifactBasicMetadata bmd, MetadataReader mdReader,
+    public List<ArtifactMetadata> getDependencies( ArtifactMetadata bmd, MetadataReader mdReader,
                                                         Map<String, String> env, Map<?, ?> sysProps )
         throws MetadataReaderException, DependencyProcessorException;
 }
diff --git a/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/MetadataReader.java b/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/MetadataReader.java
index db0e797..2557f8d 100644
--- a/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/MetadataReader.java
+++ b/mercury-external/src/main/java/org/apache/maven/mercury/builder/api/MetadataReader.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.mercury.builder.api;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  * This interface implementation is supplied to MetadataProcessor to simplify it's access to remote repositories
@@ -41,10 +41,10 @@
      * @throws MetadataReaderException
      * @throws RepositoryException
      */
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type, boolean exempt )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type, boolean exempt )
         throws MetadataReaderException;
 
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type )
         throws MetadataReaderException;
 
   /**
@@ -55,9 +55,9 @@
      * @return
      * @throws MetadataReaderException
      */
-    public byte[] readMetadata( ArtifactBasicMetadata bmd, boolean exempt )
+    public byte[] readMetadata( ArtifactMetadata bmd, boolean exempt )
         throws MetadataReaderException;
 
-    public byte[] readMetadata( ArtifactBasicMetadata bmd )
+    public byte[] readMetadata( ArtifactMetadata bmd )
         throws MetadataReaderException;
 }
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java b/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
index 2aede4a..c04c9f6 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
@@ -21,8 +21,6 @@
 
 import org.codehaus.plexus.PlexusTestCase;
 
-import junit.framework.TestCase;
-
 /**
  * Common tests code
  *
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java b/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
index 5b4af9c..beda432 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
@@ -19,6 +19,9 @@
 
 package org.apache.maven.mercury.all.it;
 
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
 import org.apache.maven.mercury.dependency.tests.DependencyTreeBuilderTest;
 import org.apache.maven.mercury.plexus.DefaultPlexusMercuryTest;
 import org.apache.maven.mercury.repository.tests.ComprehensiveRepositoryTest;
@@ -31,9 +34,6 @@
 import org.apache.maven.mercury.repository.tests.RemoteRepositoryWriterM2Test;
 import org.apache.maven.mercury.repository.tests.VirtualRepositoryReaderIntegratedTest;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 /**
  * adopted from Maven ITs structure
  *
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
index a9b7bd5..e33a37c 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
@@ -31,7 +31,6 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.event.DumbListener;
@@ -184,7 +183,7 @@
     
     List<Artifact> artifacts = new ArrayList<Artifact>();
     
-    for( ArtifactBasicMetadata abm : aRes.getResults().keySet() )
+    for( ArtifactMetadata abm : aRes.getResults().keySet() )
       artifacts.addAll(  aRes.getResults(abm) );
     
     localRepo.getWriter().writeArtifacts( artifacts );
@@ -265,7 +264,7 @@
 
     assertTrue( ar.hasResults() );
     
-    Map<ArtifactBasicMetadata, List<Artifact>> arts = ar.getResults();
+    Map<ArtifactMetadata, List<Artifact>> arts = ar.getResults();
     
     for( List<Artifact> al : arts.values() )
     {
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java
index a772ce9..48d147e 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/plexus/DefaultPlexusMercuryTest.java
@@ -27,7 +27,6 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -116,7 +115,7 @@
         File artifactBinary = File.createTempFile( "test-repo-writer", "bin" );
         FileUtil.writeRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ), artifactBinary );
 
-        a = new DefaultArtifact( new ArtifactBasicMetadata( "org.apache.maven.mercury:mercury-core:2.0.9" ) );
+        a = new DefaultArtifact( new ArtifactMetadata( "org.apache.maven.mercury:mercury-core:2.0.9" ) );
 
         a.setPomBlob( FileUtil.readRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.pom" ) ) );
         a.setFile( artifactBinary );
@@ -182,7 +181,7 @@
     {
         ArtifactMetadata gavMd = new ArtifactMetadata( gav );
 
-        for ( ArtifactBasicMetadata md : res )
+        for ( ArtifactMetadata md : res )
             if ( md.sameGAV( gavMd ) )
                 return true;
 
@@ -233,13 +232,13 @@
     {
         ArtifactMetadata bmd = new ArtifactMetadata( artifactCoord );
 
-        List<ArtifactBasicMetadata> res = pm.readVersions( repos, bmd );
+        List<ArtifactMetadata> res = pm.readVersions( repos, bmd );
 
         assertNotNull( res );
 
         assertFalse( res.isEmpty() );
 
-        ArtifactBasicMetadata a = res.get( 0 );
+        ArtifactMetadata a = res.get( 0 );
 
         assertEquals( "1.0.0-alpha-2-20081104.001322-2", a.getVersion() );
 
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java
index 6486d98..87b88be 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java
@@ -25,7 +25,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.QualityRange;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
@@ -53,9 +53,9 @@
   Repository repo;
   DependencyProcessor mdProcessor;
   RepositoryReader reader;
-  List<ArtifactBasicMetadata> query;
+  List<ArtifactMetadata> query;
   
-  ArtifactBasicMetadata bmd;
+  ArtifactMetadata bmd;
   
   private static final String publicKeyFile = "/pgp/pubring.gpg";
   private static final String secretKeyFile = "/pgp/secring.gpg";
@@ -88,7 +88,7 @@
   public void testReadReleaseVersion()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:[3,3]");
+    bmd = new ArtifactMetadata("a:a:[3,3]");
     query.add( bmd );
     
     ArtifactBasicResults res = reader.readVersions( query );
@@ -99,7 +99,7 @@
     
     assertEquals( 1, res.getResults().size() );
     
-    List<ArtifactBasicMetadata> ror = res.getResult( bmd );
+    List<ArtifactMetadata> ror = res.getResult( bmd );
     
     assertNotNull( ror );
     
@@ -116,7 +116,7 @@
   {
     repo.setRepositoryQualityRange( QualityRange.RELEASES_ONLY );
   
-    bmd = new ArtifactBasicMetadata("a:a:[3,)");
+    bmd = new ArtifactMetadata("a:a:[3,)");
     query.add( bmd );
     
     ArtifactBasicResults res = reader.readVersions( query );
@@ -131,12 +131,12 @@
     
     assertEquals( 1, res.getResults().size() );
     
-    List<ArtifactBasicMetadata> qr = res.getResult( bmd );
+    List<ArtifactMetadata> qr = res.getResult( bmd );
     
     assertNotNull( qr );
     assertTrue( qr.size() > 1 );
     
-    assertFalse( qr.contains( new ArtifactBasicMetadata("a:a:5-SNAPSHOT") ) );
+    assertFalse( qr.contains( new ArtifactMetadata("a:a:5-SNAPSHOT") ) );
     
     System.out.println("query "+bmd+"->"+qr);
     
@@ -146,25 +146,25 @@
     assertFalse( depRes.hasExceptions() );
     assertTrue( depRes.hasResults() );
     
-    ArtifactBasicMetadata a3 = new ArtifactBasicMetadata("a:a:3");
+    ArtifactMetadata a3 = new ArtifactMetadata("a:a:3");
     
     assertTrue( depRes.hasResults( a3 ) );
     
-    List<ArtifactBasicMetadata> deps = depRes.getResult( a3 );
+    List<ArtifactMetadata> deps = depRes.getResult( a3 );
     assertNotNull( deps );
     assertFalse( deps.isEmpty() );
 
     System.out.println(deps);
 
-    assertTrue( deps.contains( new ArtifactBasicMetadata("b:b:2") ) );
-    assertTrue( deps.contains( new ArtifactBasicMetadata("c:c:(1,)") ) );
+    assertTrue( deps.contains( new ArtifactMetadata("b:b:2") ) );
+    assertTrue( deps.contains( new ArtifactMetadata("c:c:(1,)") ) );
     
   }
   //------------------------------------------------------------------------------
   public void testReadArtifacts()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:3");
+    bmd = new ArtifactMetadata("a:a:3");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -193,7 +193,7 @@
   public void testReadSnapshot()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:5-SNAPSHOT");
+    bmd = new ArtifactMetadata("a:a:5-SNAPSHOT");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -223,7 +223,7 @@
   public void testReadSnapshotTS()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:5-20080807.234713-11");
+    bmd = new ArtifactMetadata("a:a:5-20080807.234713-11");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -253,7 +253,7 @@
   public void testReadVersionsLatest()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:LATEST");
+    bmd = new ArtifactMetadata("a:a:LATEST");
     query.add( bmd );
 
     ArtifactBasicResults ror = reader.readVersions( query );
@@ -262,9 +262,9 @@
     
     if( ror.hasExceptions() )
     {
-      Map<ArtifactBasicMetadata, Exception> exs = ror.getExceptions();
+      Map<ArtifactMetadata, Exception> exs = ror.getExceptions();
       
-      for( ArtifactBasicMetadata bmd : exs.keySet() )
+      for( ArtifactMetadata bmd : exs.keySet() )
       {
         System.out.println( "\n==========> "+bmd.toString());
         exs.get( bmd ).printStackTrace();
@@ -274,18 +274,18 @@
     assertFalse( ror.hasExceptions() );
     assertTrue( ror.hasResults() );
     
-    List<ArtifactBasicMetadata> deps = ror.getResult(bmd);
+    List<ArtifactMetadata> deps = ror.getResult(bmd);
     
     assertNotNull( deps );
     assertEquals( 1, deps.size() );
-    assertTrue( deps.contains( new ArtifactBasicMetadata("a:a:5-SNAPSHOT") ) );
+    assertTrue( deps.contains( new ArtifactMetadata("a:a:5-SNAPSHOT") ) );
     
   }
   //------------------------------------------------------------------------------
   public void testReadVersionsRelease()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:RELEASE");
+    bmd = new ArtifactMetadata("a:a:RELEASE");
     query.add( bmd );
 
     ArtifactBasicResults ror = reader.readVersions( query );
@@ -298,18 +298,18 @@
     assertFalse( ror.hasExceptions() );
     assertTrue( ror.hasResults() );
     
-    List<ArtifactBasicMetadata> deps = ror.getResult(bmd);
+    List<ArtifactMetadata> deps = ror.getResult(bmd);
     
     assertNotNull( deps );
     assertEquals( 1, deps.size() );
-    assertTrue( deps.contains( new ArtifactBasicMetadata("a:a:4") ) );
+    assertTrue( deps.contains( new ArtifactMetadata("a:a:4") ) );
     
   }
   //------------------------------------------------------------------------------
   public void testReadLatest()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:LATEST");
+    bmd = new ArtifactMetadata("a:a:LATEST");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -342,7 +342,7 @@
   public void testReadRelease()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:RELEASE");
+    bmd = new ArtifactMetadata("a:a:RELEASE");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -387,7 +387,7 @@
     if( goodOs )
       server.setReaderStreamVerifierFactories(factories);
 
-    bmd = new ArtifactBasicMetadata("a:a:4");
+    bmd = new ArtifactMetadata("a:a:4");
     query.add( bmd );
 
     ArtifactResults ror = reader.readArtifacts( query );
@@ -432,7 +432,7 @@
     
     server.setReaderStreamVerifierFactories(factories);
 
-    bmd = new ArtifactBasicMetadata("a:a:3");
+    bmd = new ArtifactMetadata("a:a:3");
     query.add( bmd );
 
     ArtifactResults ror = null;
@@ -465,7 +465,7 @@
                   );
     server.setReaderStreamVerifierFactories(factories);
 
-    bmd = new ArtifactBasicMetadata("a:a:2");
+    bmd = new ArtifactMetadata("a:a:2");
     query.add( bmd );
 
     ArtifactResults ror = null;
@@ -502,7 +502,7 @@
       server.setReaderStreamVerifierFactories(factories);
     }
 
-    bmd = new ArtifactBasicMetadata("a:a:3");
+    bmd = new ArtifactMetadata("a:a:3");
     query.add( bmd );
 
     ArtifactResults ror = null;
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java
index 3b5fd35..bde46c9 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java
@@ -25,15 +25,13 @@
 import java.util.Set;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
 import org.apache.maven.mercury.crypto.sha.SHA1VerifierFactory;
-import org.apache.maven.mercury.logging.IMercuryLogger;
-import org.apache.maven.mercury.logging.MercuryLoggerManager;
 import org.apache.maven.mercury.repository.api.Repository;
 import org.apache.maven.mercury.repository.api.RepositoryReader;
 import org.apache.maven.mercury.repository.api.RepositoryWriter;
@@ -63,9 +61,9 @@
   RepositoryReader reader;
   RepositoryWriter writer;
 
-  List<ArtifactBasicMetadata> query;
+  List<ArtifactMetadata> query;
   
-  ArtifactBasicMetadata bmd;
+  ArtifactMetadata bmd;
   
   String pomBlob;
   
@@ -171,7 +169,7 @@
     assertFalse( new File( targetDirectory, "/org/apache/maven/maven-core/2.0.9/"+repo.getMetadataName()+".sha1").exists() );
 
     Set<Artifact> artifacts = new HashSet<Artifact>(3);
-    DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9") );
+    DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0.9") );
     
     da.setPomBlob( pomBytes );
     da.setFile( artifactBinary );
@@ -218,7 +216,7 @@
     setSnapshots();
     
     Set<Artifact> artifacts = new HashSet<Artifact>(3);
-    DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9-20080805.215925-8") );
+    DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0.9-20080805.215925-8") );
     da.setPomBlob( pomBytes );
     da.setFile( artifactBinary );
     artifacts.add( da );
@@ -240,7 +238,7 @@
     setSnapshots();
     
     Set<Artifact> set = new HashSet<Artifact>(3);
-    DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9-SNAPSHOT") );
+    DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0.9-SNAPSHOT") );
     da.setPomBlob( pomBytes );
     da.setFile( artifactBinary );
     set.add( da );
@@ -262,7 +260,7 @@
     setSnapshots();
     
     Set<Artifact> set = new HashSet<Artifact>(3);
-    DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9:all") );
+    DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0.9:all") );
     da.setFile( artifactBinary );
     set.add( da );
     
@@ -285,7 +283,7 @@
     {
       String si = ""+i;
       
-      DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0.9-20080805.215925-"+si) );
+      DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0.9-20080805.215925-"+si) );
       da.setPomBlob( pomBytes );
       File ab = File.createTempFile( "test-core-", "-bin" );
       FileUtil.writeRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ), ab );
@@ -354,14 +352,14 @@
     {
       String si = ""+i;
       
-      DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-core:2.0."+si+"-SNAPSHOT") );
+      DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-core:2.0."+si+"-SNAPSHOT") );
       da.setPomBlob( pomBytes );
       File ab = File.createTempFile( "test-core-", "-bin" );
       FileUtil.writeRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ), ab );
       da.setFile( ab );
       set.add( da );
 
-      da = new DefaultArtifact( new ArtifactBasicMetadata("org.apache.maven:maven-mercury:2.0."+si+"-SNAPSHOT") );
+      da = new DefaultArtifact( new ArtifactMetadata("org.apache.maven:maven-mercury:2.0."+si+"-SNAPSHOT") );
       da.setPomBlob( pomBytes );
       ab = File.createTempFile( "test-mercury-", "-bin" );
       FileUtil.writeRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ), ab );
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ComprehensiveRepositoryTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ComprehensiveRepositoryTest.java
index aebac29..c7ab423 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ComprehensiveRepositoryTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ComprehensiveRepositoryTest.java
@@ -27,7 +27,7 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
@@ -197,7 +197,7 @@
     public void writeArtifact( String name, File af, File ap, Repository repo, File expectedFile )
     throws Exception
     {
-        DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata(name) );
+        DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata(name) );
         
         da.setPomBlob( FileUtil.readRawData( ap ) );
         da.setFile( af );
@@ -222,9 +222,9 @@
     public List<Artifact> readArtifact( String name , List<Repository> repos )
     throws Exception
     {
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata(name);
+        ArtifactMetadata bmd = new ArtifactMetadata(name);
         
-        List<ArtifactBasicMetadata> al = new ArrayList<ArtifactBasicMetadata>();
+        List<ArtifactMetadata> al = new ArrayList<ArtifactMetadata>();
         al.add( bmd );
         
         VirtualRepositoryReader vr = new VirtualRepositoryReader( repos );
@@ -241,12 +241,12 @@
         return res.getResults( bmd );
     }
     
-    public List<ArtifactBasicMetadata> readVersions( String name , List<Repository> repos )
+    public List<ArtifactMetadata> readVersions( String name , List<Repository> repos )
     throws Exception
     {
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata(name);
+        ArtifactMetadata bmd = new ArtifactMetadata(name);
         
-        List<ArtifactBasicMetadata> al = new ArrayList<ArtifactBasicMetadata>();
+        List<ArtifactMetadata> al = new ArrayList<ArtifactMetadata>();
         al.add( bmd );
         
         VirtualRepositoryReader vr = new VirtualRepositoryReader( repos );
@@ -473,7 +473,7 @@
         writeArtifact( nameTS2, af, ap, _rr2, null );
         writeArtifact( nameSN, af, ap, _rr2, null );
         
-        List<ArtifactBasicMetadata> vl = readVersions( nameSN, _rrs );
+        List<ArtifactMetadata> vl = readVersions( nameSN, _rrs );
         
         System.out.println(vl);
         
@@ -514,7 +514,7 @@
         aJar = new File( _base1, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232324-24.jar");
         writeArtifact( nameTS2, af, ap, _rr1, aJar );
         
-        List<ArtifactBasicMetadata> vl = readVersions( nameSN, _rrs );
+        List<ArtifactMetadata> vl = readVersions( nameSN, _rrs );
         
         System.out.println(vl);
         
@@ -555,7 +555,7 @@
         aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232324-24.jar");
         writeArtifact( nameTS2, af, ap, _rr2, aJar );
         
-        List<ArtifactBasicMetadata> vl = readVersions( nameSN, _rrs );
+        List<ArtifactMetadata> vl = readVersions( nameSN, _rrs );
         
         System.out.println(vl);
         
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/DavServerTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/DavServerTest.java
index c195665..a52b6bb 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/DavServerTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/DavServerTest.java
@@ -26,7 +26,7 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.repository.api.ArtifactResults;
 import org.apache.maven.mercury.repository.api.RepositoryReader;
@@ -153,7 +153,7 @@
         File pom = new File("./target/test.pom");
         FileUtil.writeRawData( pom, "test-pom" );
 
-        DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("a:test:1.0") );
+        DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("a:test:1.0") );
         da.setFile( jar );
         da.setPomBlob( FileUtil.readRawData( pom ) );
 
@@ -176,9 +176,9 @@
     {
         testDavWrite();
         
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("a:test:1.0");
+        ArtifactMetadata bmd = new ArtifactMetadata("a:test:1.0");
         
-        List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+        List<ArtifactMetadata> query = new ArrayList<ArtifactMetadata>( 1 );
 
         query.add( bmd );
         
@@ -218,7 +218,7 @@
         File pom = new File("./target/test.pom");
         FileUtil.writeRawData( pom, "test-pom" );
 
-        DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("a:test:1.0") );
+        DefaultArtifact da = new DefaultArtifact( new ArtifactMetadata("a:test:1.0") );
         da.setFile( jar );
         da.setPomBlob( FileUtil.readRawData( pom ) );
 
@@ -241,9 +241,9 @@
     {
         testDavWrite2();
         
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("a:test:1.0");
+        ArtifactMetadata bmd = new ArtifactMetadata("a:test:1.0");
         
-        List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+        List<ArtifactMetadata> query = new ArrayList<ArtifactMetadata>( 1 );
 
         query.add( bmd );
         
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryReaderM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryReaderM2Test.java
index 3d36e22..4abfbba 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryReaderM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryReaderM2Test.java
@@ -22,7 +22,7 @@
 import java.util.ArrayList;
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
 import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
 import org.apache.maven.mercury.transport.api.Server;
@@ -44,7 +44,7 @@
   {
     mdProcessor = new MetadataProcessorMock();
 
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
 
     server = new Server( "test", new File("./target/test-classes/repo").toURL() );
       
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryWriterM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryWriterM2Test.java
index 185f341..3a1f1fb 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryWriterM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/LocalRepositoryWriterM2Test.java
@@ -24,7 +24,7 @@
 import java.util.HashSet;
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
@@ -58,7 +58,7 @@
     FileUtil.copy( new File("./target/test-classes/repo"), targetDirectory, true );
     FileUtil.delete( new File(targetDirectory, "org") );
     
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
     
     server = new Server( "test", targetDirectory.toURL() );
     // verifiers
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ReadWriteTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ReadWriteTest.java
index 4e77c8c..590f09d 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ReadWriteTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ReadWriteTest.java
@@ -28,7 +28,7 @@
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.logging.IMercuryLogger;
 import org.apache.maven.mercury.logging.MercuryLoggerManager;
@@ -69,9 +69,9 @@
   File localRepoBase;
   RepositoryWriter writer;
 
-  List<ArtifactBasicMetadata> query;
+  List<ArtifactMetadata> query;
   
-  ArtifactBasicMetadata bmd;
+  ArtifactMetadata bmd;
   
   Server server;
   
@@ -100,7 +100,7 @@
     lr = new LocalRepositoryM2( "lr", localRepoBase, new MavenDependencyProcessor() );
     writer = lr.getWriter(); 
 
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
   }
 
   protected void tearDown()
@@ -114,7 +114,7 @@
   public void testOneArtifact()
   throws IllegalArgumentException, RepositoryException
   {
-    bmd = new ArtifactBasicMetadata("a:a:4");
+    bmd = new ArtifactMetadata("a:a:4");
     query.add( bmd );
     
     ArtifactResults res = reader.readArtifacts( query );
@@ -123,7 +123,7 @@
     assertFalse( res.hasExceptions() );
     assertTrue( res.hasResults() );
     
-    Map< ArtifactBasicMetadata, List<Artifact>> resMap = res.getResults();
+    Map< ArtifactMetadata, List<Artifact>> resMap = res.getResults();
     
     assertNotNull( resMap );
     assertFalse( resMap.isEmpty() );
@@ -151,7 +151,7 @@
   public void testOneArtifactWithClassifier()
   throws IllegalArgumentException, RepositoryException
   {
-    ArtifactBasicMetadata bm = new ArtifactBasicMetadata("a:a:4:sources");
+    ArtifactMetadata bm = new ArtifactMetadata("a:a:4:sources");
     query.add( bm );
     
     ArtifactResults res = reader.readArtifacts( query );
@@ -160,7 +160,7 @@
     assertFalse( res.hasExceptions() );
     assertTrue( res.hasResults() );
     
-    Map< ArtifactBasicMetadata, List<Artifact>> resMap = res.getResults();
+    Map< ArtifactMetadata, List<Artifact>> resMap = res.getResults();
     
     assertNotNull( resMap );
     assertFalse( resMap.isEmpty() );
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
index fdb0d35..ce822ed 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
@@ -28,7 +28,7 @@
 import java.util.List;
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
 import org.apache.maven.mercury.repository.api.RemoteRepository;
 import org.apache.maven.mercury.repository.api.RepositoryException;
@@ -78,7 +78,7 @@
 
     mdProcessor = new MetadataProcessorMock();
 
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
 
     server = new Server( "test", new URL("http://localhost:"+_port+"/repo") );
     
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java
index 1c6f7c2..5250ebc 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java
@@ -29,7 +29,7 @@
 import java.util.List;
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
 import org.apache.maven.mercury.repository.api.RepositoryException;
 import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
@@ -73,7 +73,7 @@
 
     mdProcessor = new MetadataProcessorMock();
 
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
 
     server = new Server( "test", new URL("http://localhost:"+_port+"/repo") );
     repo = new RemoteRepositoryM2( "testRepo", server, new MavenDependencyProcessor() );
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryWriterM2Test.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryWriterM2Test.java
index 57e87e9..0339ead 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryWriterM2Test.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryWriterM2Test.java
@@ -23,8 +23,7 @@
 import java.util.ArrayList;
 import java.util.HashSet;
 
-import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
@@ -128,7 +127,7 @@
   {
     super.setUp();
 
-    query = new ArrayList<ArtifactBasicMetadata>();
+    query = new ArrayList<ArtifactMetadata>();
 
     startDavServer( _basePath, "mercury-test"  );
   }
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java
index 9e71294..763fbf8 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java
@@ -21,7 +21,7 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  *
@@ -32,7 +32,7 @@
  */
 public class THelper
 {
-  public static List<ArtifactBasicMetadata> toList( ArtifactBasicMetadata... bmds)
+  public static List<ArtifactMetadata> toList( ArtifactMetadata... bmds)
   {
     return Arrays.asList( bmds );
   }
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java
index ca2cb6d..76707e4 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java
@@ -27,13 +27,11 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.MavenDependencyProcessor;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
 import org.apache.maven.mercury.repository.api.ArtifactResults;
 import org.apache.maven.mercury.repository.api.Repository;
-import org.apache.maven.mercury.repository.api.RepositoryException;
 import org.apache.maven.mercury.repository.api.RepositoryUpdateIntervalPolicy;
 import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
 import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
@@ -57,7 +55,7 @@
   public String _port;
   HttpTestServer _server;
   
-  List<ArtifactBasicMetadata> _query;
+  List<ArtifactMetadata> _query;
   
   RemoteRepositoryM2 _remoteRepo;
   LocalRepositoryM2  _localRepo;
@@ -80,7 +78,7 @@
     _server.start();
     _port = String.valueOf( _server.getPort() );
 
-    _query = new ArrayList<ArtifactBasicMetadata>();
+    _query = new ArrayList<ArtifactMetadata>();
 
     DependencyProcessor mdProcessor = new MetadataProcessorMock();
 
@@ -113,8 +111,8 @@
   {
     try
     {
-    ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("a:a:[1,)");
-    List<ArtifactBasicMetadata> q = THelper.toList( bmd );
+    ArtifactMetadata bmd = new ArtifactMetadata("a:a:[1,)");
+    List<ArtifactMetadata> q = THelper.toList( bmd );
     
     ArtifactBasicResults vres = _vr.readVersions( q );
      
@@ -126,7 +124,7 @@
     
     assertTrue( vres.hasResults(bmd) );
     
-    List<ArtifactBasicMetadata> versions = vres.getResult( bmd );
+    List<ArtifactMetadata> versions = vres.getResult( bmd );
     
     assertNotNull( versions );
     
@@ -189,8 +187,8 @@
   //-------------------------------------------------------------------------
   public void testReadBadVersions()
   {
-    ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("does.not:exist:1.0");
-    List<ArtifactBasicMetadata> q = THelper.toList( bmd );
+    ArtifactMetadata bmd = new ArtifactMetadata("does.not:exist:1.0");
+    List<ArtifactMetadata> q = THelper.toList( bmd );
     
     ArtifactBasicResults vres = null;
     try
@@ -208,7 +206,7 @@
   //-------------------------------------------------------------------------
   public void testReadBadDependencies()
   {
-    ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("does.not:exist:1.0");
+    ArtifactMetadata bmd = new ArtifactMetadata("does.not:exist:1.0");
     
     ArtifactMetadata vres = null;
     try
@@ -226,8 +224,8 @@
   //-------------------------------------------------------------------------
   public void testReadBadArtifact()
   {
-      ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("does.not:exist:1.0");
-      List<ArtifactBasicMetadata> q = THelper.toList( bmd );
+      ArtifactMetadata bmd = new ArtifactMetadata("does.not:exist:1.0");
+      List<ArtifactMetadata> q = THelper.toList( bmd );
       
     ArtifactResults vres = null;
     try
diff --git a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/WebDavServer.java b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/WebDavServer.java
index 5b0de6e..d746f9e 100644
--- a/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/WebDavServer.java
+++ b/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/WebDavServer.java
@@ -20,17 +20,11 @@
 package org.apache.maven.mercury.repository.tests;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.Servlet;
 
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ContextHandlerCollection;
-import org.mortbay.jetty.handler.DefaultHandler;
-import org.mortbay.jetty.handler.HandlerCollection;
 import org.mortbay.jetty.servlet.Context;
 import org.mortbay.jetty.servlet.ServletHolder;
 import org.sonatype.webdav.WebdavServlet;
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
index 46aab02..5851ce1 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
@@ -20,7 +20,6 @@
 
 import java.util.List;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -49,7 +48,7 @@
    * @return the root of the tree built
    * @throws MetadataTreeException
    */
-  public abstract MetadataTreeNode buildTree( ArtifactBasicMetadata startMD, ArtifactScopeEnum scope )
+  public abstract MetadataTreeNode buildTree( ArtifactMetadata startMD, ArtifactScopeEnum scope )
   throws MetadataTreeException;
 
   /**
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
index d31b88e..c789776 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
@@ -25,7 +25,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -118,7 +117,7 @@
     }
 
     // ------------------------------------------------------------------------
-    public MetadataTreeNode buildTree( ArtifactBasicMetadata startMD, ArtifactScopeEnum treeScope )
+    public MetadataTreeNode buildTree( ArtifactMetadata startMD, ArtifactScopeEnum treeScope )
         throws MetadataTreeException
     {
         if ( startMD == null )
@@ -167,7 +166,7 @@
         if ( artifacts == null )
             throw new MetadataTreeException( LANG.getMessage( "empty.md.collection" ) );
 
-        List<ArtifactBasicMetadata> startMDs = artifacts.getMetadataList();
+        List<ArtifactMetadata> startMDs = artifacts.getMetadataList();
         
         if ( Util.isEmpty( startMDs ) )
             throw new MetadataTreeException( LANG.getMessage( "empty.md.collection" ) );
@@ -176,7 +175,7 @@
 
         if ( nodeCount == 1 && inclusions == null && exclusions == null )
         {
-            ArtifactBasicMetadata bmd = startMDs.get( 0 );
+            ArtifactMetadata bmd = startMDs.get( 0 );
             MetadataTreeNode rooty = buildTree( bmd, scope );
             List<ArtifactMetadata> res = resolveConflicts( rooty );
             return res;
@@ -190,7 +189,7 @@
         
         if( _buildAllTrees )
         {
-            for ( ArtifactBasicMetadata bmd : startMDs )
+            for ( ArtifactMetadata bmd : startMDs )
             {
                 try
                 {
@@ -204,7 +203,7 @@
            
                 if( inclusions != null )
                 {
-                    List<ArtifactBasicMetadata> inc = inclusions.getMetadataList();
+                    List<ArtifactMetadata> inc = inclusions.getMetadataList();
                     
                     if( bmd.hasInclusions() )
                         bmd.getInclusions().addAll( inc );
@@ -214,7 +213,7 @@
                 
                 if( exclusions != null )
                 {
-                    List<ArtifactBasicMetadata> excl = exclusions.getMetadataList();
+                    List<ArtifactMetadata> excl = exclusions.getMetadataList();
                     
                     if( bmd.hasExclusions() )
                         bmd.getExclusions().addAll( excl );
@@ -250,8 +249,8 @@
         return res;
     }
     // -----------------------------------------------------
-    private MetadataTreeNode createNode( ArtifactBasicMetadata nodeMD, MetadataTreeNode parent
-                                         , ArtifactBasicMetadata nodeQuery, ArtifactScopeEnum globalScope
+    private MetadataTreeNode createNode( ArtifactMetadata nodeMD, MetadataTreeNode parent
+                                         , ArtifactMetadata nodeQuery, ArtifactScopeEnum globalScope
                                        )
         throws MetadataTreeException
     {
@@ -281,14 +280,14 @@
 
             MetadataTreeNode node = new MetadataTreeNode( mr, parent, nodeQuery );
 
-            List<ArtifactBasicMetadata> allDependencies = mr.getDependencies();
+            List<ArtifactMetadata> allDependencies = mr.getDependencies();
 
             if ( allDependencies == null || allDependencies.size() < 1 )
                 return node;
 
-            List<ArtifactBasicMetadata> dependencies = new ArrayList<ArtifactBasicMetadata>( allDependencies.size() );
+            List<ArtifactMetadata> dependencies = new ArrayList<ArtifactMetadata>( allDependencies.size() );
             if ( globalScope != null )
-                for ( ArtifactBasicMetadata md : allDependencies )
+                for ( ArtifactMetadata md : allDependencies )
                 {
                     ArtifactScopeEnum mdScope = md.getArtifactScope();
                     if ( globalScope.encloses( mdScope ) )
@@ -305,15 +304,15 @@
             if( res == null )
                 throw new MetadataTreeException( LANG.getMessage( "no.versions", dependencies.toString() ) );
 
-            Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> expandedDeps = res.getResults();
+            Map<ArtifactMetadata, List<ArtifactMetadata>> expandedDeps = res.getResults();
 
-            for ( ArtifactBasicMetadata md : dependencies )
+            for ( ArtifactMetadata md : dependencies )
             {
 
                 if ( LOG.isDebugEnabled() )
                     LOG.debug( "node " + nodeQuery + ", dep " + md );
 
-                List<ArtifactBasicMetadata> versions = expandedDeps.get( md );
+                List<ArtifactMetadata> versions = expandedDeps.get( md );
                 if ( versions == null || versions.size() < 1 )
                 {
                     if ( md.isOptional() )
@@ -325,7 +324,7 @@
                 boolean noVersions = true;
                 boolean noGoodVersions = true;
 
-                for ( ArtifactBasicMetadata ver : versions )
+                for ( ArtifactMetadata ver : versions )
                 {
                     if ( veto( ver, _filters ) || vetoInclusionsExclusions( node, ver ) )
                     {
@@ -393,7 +392,7 @@
     }
 
     // -----------------------------------------------------
-    private void checkForCircularDependency( ArtifactBasicMetadata md, MetadataTreeNode parent )
+    private void checkForCircularDependency( ArtifactMetadata md, MetadataTreeNode parent )
         throws MetadataTreeCircularDependencyException
     {
         MetadataTreeNode p = parent;
@@ -424,7 +423,7 @@
     }
 
     // -----------------------------------------------------
-    private boolean veto( ArtifactBasicMetadata md, Collection<MetadataTreeArtifactFilter> filters )
+    private boolean veto( ArtifactMetadata md, Collection<MetadataTreeArtifactFilter> filters )
     {
         if ( filters != null && filters.size() > 1 )
             for ( MetadataTreeArtifactFilter filter : filters )
@@ -434,12 +433,12 @@
     }
 
     // -----------------------------------------------------
-    private boolean vetoInclusionsExclusions( MetadataTreeNode node, ArtifactBasicMetadata ver )
+    private boolean vetoInclusionsExclusions( MetadataTreeNode node, ArtifactMetadata ver )
         throws VersionException
     {
         for ( MetadataTreeNode n = node; n != null; n = n.getParent() )
         {
-            ArtifactBasicMetadata md = n.getQuery();
+            ArtifactMetadata md = n.getQuery();
 
             if ( !md.allowDependency( ver ) ) // veto it
                 return true;
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java
index 507ece5..9f98c19 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilter.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.mercury.metadata;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  * This is a member of a chain of filters that can stop an ArtifactMetadata 
@@ -28,5 +28,5 @@
  */
 public interface MetadataTreeArtifactFilter
 {
-  public boolean veto( ArtifactBasicMetadata md );
+  public boolean veto( ArtifactMetadata md );
 }
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilterMap.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilterMap.java
index ca1deb3..34bd176 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilterMap.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeArtifactFilterMap.java
@@ -22,7 +22,7 @@
 import java.util.Collection;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.util.Util;
 
 /**
@@ -42,7 +42,7 @@
         _vetos = vetos;
     }
     
-    public boolean veto( ArtifactBasicMetadata md )
+    public boolean veto( ArtifactMetadata md )
     {
         String key = md.toManagementString();
         
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
index ee184ee..883b9ca 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
@@ -25,7 +25,6 @@
 import java.util.List;
 import java.util.TreeSet;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.logging.IMercuryLogger;
@@ -68,12 +67,12 @@
   /**
    * query node - the one that originated this actual node
    */
-  ArtifactBasicMetadata query;
+  ArtifactMetadata query;
 
   /**
    * queries - one per POM dependency
    */
-  List<ArtifactBasicMetadata> queries;
+  List<ArtifactMetadata> queries;
 
   /**
    * actual found versions
@@ -135,7 +134,7 @@
    */
   public MetadataTreeNode( ArtifactMetadata md
                            , MetadataTreeNode parent
-                           , ArtifactBasicMetadata query
+                           , ArtifactMetadata query
                          )
   {
         if ( md != null )
@@ -172,7 +171,7 @@
   /**
    * dependencies are ordered in the POM - they should be added in the POM order
    */
-  public MetadataTreeNode addQuery( ArtifactBasicMetadata query )
+  public MetadataTreeNode addQuery( ArtifactMetadata query )
   {
       if ( query == null )
       {
@@ -181,7 +180,7 @@
 
       if( queries == null )
       {
-        queries = new ArrayList<ArtifactBasicMetadata>( DEFAULT_CHILDREN_COUNT );
+        queries = new ArrayList<ArtifactMetadata>( DEFAULT_CHILDREN_COUNT );
       }
               
       queries.add( query );
@@ -256,12 +255,12 @@
         return optional;
     }
     
-    public ArtifactBasicMetadata getQuery()
+    public ArtifactMetadata getQuery()
     {
       return query;
     }
     
-    public List<ArtifactBasicMetadata> getQueries()
+    public List<ArtifactMetadata> getQueries()
     {
       return queries;
     }
diff --git a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
index 9181cc9..1457cc1 100644
--- a/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
+++ b/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
@@ -27,7 +27,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.event.EventManager;
 import org.apache.maven.mercury.event.EventTypeEnum;
@@ -408,8 +407,8 @@
   LOG.debug(( ge ? " >= " : " < ")+" "+cardinality );
   }
   //-----------------------------------------------------------------------
-  private final Map<ArtifactBasicMetadata, List<MetadataTreeNode>> processChildren(
-                                                        List<ArtifactBasicMetadata> queries
+  private final Map<ArtifactMetadata, List<MetadataTreeNode>> processChildren(
+                                                        List<ArtifactMetadata> queries
                                                         , List<MetadataTreeNode> children
                                                                               )
   throws SatException
@@ -421,9 +420,9 @@
       throw new SatException("there are queries, but not results. Queries: "+queries);
     
     // TODO og: MERCURY-40
-    Map<ArtifactBasicMetadata, List<MetadataTreeNode>> res = new LinkedHashMap<ArtifactBasicMetadata, List<MetadataTreeNode>>( queries.size() );
+    Map<ArtifactMetadata, List<MetadataTreeNode>> res = new LinkedHashMap<ArtifactMetadata, List<MetadataTreeNode>>( queries.size() );
 
-    for( ArtifactBasicMetadata q : queries )
+    for( ArtifactMetadata q : queries )
     {
       List<MetadataTreeNode> bucket = new ArrayList<MetadataTreeNode>(4);
       String queryGA = q.getGA();
@@ -466,15 +465,15 @@
     if( ! node.hasChildren() )
       return;
     
-    Map<ArtifactBasicMetadata,List<MetadataTreeNode>> kids = processChildren( node.getQueries(), node.getChildren() );
+    Map<ArtifactMetadata,List<MetadataTreeNode>> kids = processChildren( node.getQueries(), node.getChildren() );
     
     // leaf node in this scope
     if( kids == null )
       return;
     
-    for( Map.Entry<ArtifactBasicMetadata,List<MetadataTreeNode>> kid : kids.entrySet() )
+    for( Map.Entry<ArtifactMetadata,List<MetadataTreeNode>> kid : kids.entrySet() )
     {
-      ArtifactBasicMetadata query = kid.getKey();
+      ArtifactMetadata query = kid.getKey();
       
       List<MetadataTreeNode> range = kid.getValue();
 
diff --git a/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/DependencyTreeBuilderTest.java b/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/DependencyTreeBuilderTest.java
index 336f046..3aad995 100644
--- a/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/DependencyTreeBuilderTest.java
+++ b/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/DependencyTreeBuilderTest.java
@@ -24,7 +24,6 @@
 
 import junit.framework.TestCase;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
@@ -160,8 +159,8 @@
     String title = "testResolveScopedConflictsWithFiltering";
     ArtifactMetadata md = new ArtifactMetadata( "a:a:4" );
     
-    List<ArtifactBasicMetadata> exclusions = new ArrayList<ArtifactBasicMetadata>();
-    exclusions.add( new ArtifactBasicMetadata("c:c:3") );
+    List<ArtifactMetadata> exclusions = new ArrayList<ArtifactMetadata>();
+    exclusions.add( new ArtifactMetadata("c:c:3") );
     md.setExclusions( exclusions );
     
     MetadataTreeNode root = mt.buildTree( md, ArtifactScopeEnum.compile );
@@ -185,8 +184,8 @@
     String title = "testResolveScopedConflictsWithFilteringOne";
     ArtifactMetadata md = new ArtifactMetadata( "a:a:2" );
     
-    List<ArtifactBasicMetadata> exclusions = new ArrayList<ArtifactBasicMetadata>();
-    exclusions.add( new ArtifactBasicMetadata("c:c:2") );
+    List<ArtifactMetadata> exclusions = new ArrayList<ArtifactMetadata>();
+    exclusions.add( new ArtifactMetadata("c:c:2") );
     md.setExclusions( exclusions );
     
     MetadataTreeNode root = mt.buildTree( md, ArtifactScopeEnum.compile );
@@ -211,9 +210,9 @@
     String title = "testResolveScopedConflictsWithFilteringTwo";
     ArtifactMetadata md = new ArtifactMetadata( "a:a:2" );
     
-    List<ArtifactBasicMetadata> exclusions = new ArrayList<ArtifactBasicMetadata>();
-    exclusions.add( new ArtifactBasicMetadata("b:b:2") );
-    exclusions.add( new ArtifactBasicMetadata("c:c:2") );
+    List<ArtifactMetadata> exclusions = new ArrayList<ArtifactMetadata>();
+    exclusions.add( new ArtifactMetadata("b:b:2") );
+    exclusions.add( new ArtifactMetadata("c:c:2") );
     md.setExclusions( exclusions );
     
     MetadataTreeNode root = mt.buildTree( md, ArtifactScopeEnum.compile );
@@ -239,10 +238,10 @@
     String title = "testResolveScopedConflictsWithFilteringTwo";
     ArtifactMetadata md = new ArtifactMetadata( "a:a:2" );
     
-    List<ArtifactBasicMetadata> exclusions = new ArrayList<ArtifactBasicMetadata>();
-    exclusions.add( new ArtifactBasicMetadata("b:b:1") );
-    exclusions.add( new ArtifactBasicMetadata("b:b:2") );
-    exclusions.add( new ArtifactBasicMetadata("c:c:2") );
+    List<ArtifactMetadata> exclusions = new ArrayList<ArtifactMetadata>();
+    exclusions.add( new ArtifactMetadata("b:b:1") );
+    exclusions.add( new ArtifactMetadata("b:b:2") );
+    exclusions.add( new ArtifactMetadata("c:c:2") );
     md.setExclusions( exclusions );
     
     MetadataTreeNode root = mt.buildTree( md, ArtifactScopeEnum.compile );
diff --git a/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java b/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java
index 5751667..a96ee3c 100644
--- a/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java
+++ b/mercury-md/mercury-md-sat/src/test/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolverTest.java
@@ -27,7 +27,6 @@
 
 import junit.framework.TestCase;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.metadata.ClassicDepthComparator;
 import org.apache.maven.mercury.metadata.ClassicVersionComparator;
@@ -101,7 +100,7 @@
       .addQuery(b2)
     ;
     
-    ArtifactBasicMetadata c2q = new ArtifactBasicMetadata("t:c:[2,4)");
+    ArtifactMetadata c2q = new ArtifactMetadata("t:c:[2,4)");
     
     MetadataTreeNode nd1 = new MetadataTreeNode( d1, na1, d1 )
       .addQuery( c2q )
@@ -363,7 +362,7 @@
       .addQuery(b2)
     ;
     
-    ArtifactBasicMetadata c2q = new ArtifactBasicMetadata("t:c:[2,4)");
+    ArtifactMetadata c2q = new ArtifactMetadata("t:c:[2,4)");
     
     MetadataTreeNode nb1 = new MetadataTreeNode( b1, na1, b1 )
       .addQuery( c2q )
@@ -440,7 +439,7 @@
       .addQuery(b2)
     ;
     
-    ArtifactBasicMetadata c2q = new ArtifactBasicMetadata("t:c:[2,4)");
+    ArtifactMetadata c2q = new ArtifactMetadata("t:c:[2,4)");
     
     MetadataTreeNode nd1 = new MetadataTreeNode( d1, na1, d1 )
       .addQuery( c2q )
@@ -519,7 +518,7 @@
       .addQuery(b2)
     ;
     
-    ArtifactBasicMetadata c2q = new ArtifactBasicMetadata("t:c:[2,4)");
+    ArtifactMetadata c2q = new ArtifactMetadata("t:c:[2,4)");
     
     MetadataTreeNode nd1 = new MetadataTreeNode( d1, na1, d1 )
       .addQuery( c2q )
diff --git a/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java b/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
index fe6c6ea..dc2d325 100644
--- a/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
+++ b/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
@@ -30,7 +30,6 @@
 import java.util.Set;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -200,7 +199,7 @@
 
     // ---------------------------------------------------------------
     // ---------------------------------------------------------------
-    public List<Artifact> read( List<Repository> repos, List<? extends ArtifactBasicMetadata> artifacts )
+    public List<Artifact> read( List<Repository> repos, List<? extends ArtifactMetadata> artifacts )
         throws RepositoryException
     {
         if ( Util.isEmpty( repos ) )
@@ -219,17 +218,17 @@
         if ( !ar.hasResults() )
             return null;
 
-        Map<ArtifactBasicMetadata, List<Artifact>> am = ar.getResults();
+        Map<ArtifactMetadata, List<Artifact>> am = ar.getResults();
 
         List<Artifact> al = new ArrayList<Artifact>();
-        for ( Map.Entry<ArtifactBasicMetadata, List<Artifact>> e : am.entrySet() )
+        for ( Map.Entry<ArtifactMetadata, List<Artifact>> e : am.entrySet() )
             al.addAll( e.getValue() );
 
         return al;
 
     }
 
-    public List<Artifact> read( List<Repository> repos, ArtifactBasicMetadata... artifacts )
+    public List<Artifact> read( List<Repository> repos, ArtifactMetadata... artifacts )
         throws RepositoryException
     {
         return read( repos, Arrays.asList( artifacts ) );
@@ -295,11 +294,11 @@
      * @return list of found version metadatas
      * @throws PlexusMercuryException
      */
-    public List<ArtifactBasicMetadata> readVersions( List<Repository> repos, ArtifactBasicMetadata query )
+    public List<ArtifactMetadata> readVersions( List<Repository> repos, ArtifactMetadata query )
         throws RepositoryException
     {
         VirtualRepositoryReader vr = new VirtualRepositoryReader( repos );
-        List<ArtifactBasicMetadata> q = new ArrayList<ArtifactBasicMetadata>( 1 );
+        List<ArtifactMetadata> q = new ArrayList<ArtifactMetadata>( 1 );
         q.add( query );
 
         ArtifactBasicResults res = vr.readVersions( q );
diff --git a/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java b/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java
index 52c5318..81373dc 100644
--- a/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java
+++ b/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/PlexusMercury.java
@@ -26,7 +26,6 @@
 import java.util.Set;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactExclusionList;
 import org.apache.maven.mercury.artifact.ArtifactInclusionList;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
@@ -172,10 +171,10 @@
      * @return
      * @throws PlexusMercuryException
      */
-    public List<Artifact> read( List<Repository> repo, List<? extends ArtifactBasicMetadata> artifacts )
+    public List<Artifact> read( List<Repository> repo, List<? extends ArtifactMetadata> artifacts )
         throws RepositoryException;
 
-    public List<Artifact> read( List<Repository> repo, ArtifactBasicMetadata... artifacts )
+    public List<Artifact> read( List<Repository> repo, ArtifactMetadata... artifacts )
         throws RepositoryException;
 
     /**
@@ -205,6 +204,6 @@
      * @return list of found version metadatas
      * @throws PlexusMercuryException
      */
-    public List<ArtifactBasicMetadata> readVersions( List<Repository> repos, ArtifactBasicMetadata query )
+    public List<ArtifactMetadata> readVersions( List<Repository> repos, ArtifactMetadata query )
         throws RepositoryException;
 }
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstracRepositoryReader.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstracRepositoryReader.java
index 3594df0..f0e3b18 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstracRepositoryReader.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstracRepositoryReader.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.mercury.repository.api;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
@@ -75,13 +75,13 @@
     return _mdCache != null;
   }
   
-  public byte[] readMetadata( ArtifactBasicMetadata bmd, boolean exempt  )
+  public byte[] readMetadata( ArtifactMetadata bmd, boolean exempt  )
   throws MetadataReaderException
   {
     return readRawData( bmd, "", "pom", exempt );
   }
   
-  public byte[] readMetadata( ArtifactBasicMetadata bmd )
+  public byte[] readMetadata( ArtifactMetadata bmd )
   throws MetadataReaderException
   {
     return readMetadata( bmd, false );
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepOpResult.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepOpResult.java
index 4434a5b..8e4582b 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepOpResult.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepOpResult.java
@@ -21,7 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  * generic repository operation result. Represents a Map of query object to AbstractRepositoryOperationResult
@@ -31,38 +31,38 @@
  */
 public abstract class AbstractRepOpResult
 {
-    private Map<ArtifactBasicMetadata, Exception> _exceptions;
+    private Map<ArtifactMetadata, Exception> _exceptions;
 
     public AbstractRepOpResult()
     {
     }
 
-    public Map<ArtifactBasicMetadata, Exception> getExceptions()
+    public Map<ArtifactMetadata, Exception> getExceptions()
     {
         return _exceptions;
     }
 
     public abstract boolean hasResults();
 
-    public abstract boolean hasResults( ArtifactBasicMetadata key );
+    public abstract boolean hasResults( ArtifactMetadata key );
 
     public boolean hasExceptions()
     {
         return _exceptions != null && !_exceptions.isEmpty();
     }
 
-    public void addError( ArtifactBasicMetadata key, Exception error )
+    public void addError( ArtifactMetadata key, Exception error )
     {
         if ( _exceptions == null )
-            _exceptions = new HashMap<ArtifactBasicMetadata, Exception>( 8 );
+            _exceptions = new HashMap<ArtifactMetadata, Exception>( 8 );
 
         _exceptions.put( key, error );
     }
 
-    public void addError( Map<ArtifactBasicMetadata, Exception> error )
+    public void addError( Map<ArtifactMetadata, Exception> error )
     {
         if ( _exceptions == null )
-            _exceptions = new HashMap<ArtifactBasicMetadata, Exception>( 8 );
+            _exceptions = new HashMap<ArtifactMetadata, Exception>( 8 );
 
         _exceptions.putAll( error );
     }
@@ -73,13 +73,13 @@
             return;
 
         if ( _exceptions == null )
-            _exceptions = new HashMap<ArtifactBasicMetadata, Exception>( 8 );
+            _exceptions = new HashMap<ArtifactMetadata, Exception>( 8 );
         
-        for( ArtifactBasicMetadata bmd : res.getExceptions().keySet() )
+        for( ArtifactMetadata bmd : res.getExceptions().keySet() )
            _exceptions.put( bmd, res.getError( bmd ) );
     }
 
-    public Exception getError( ArtifactBasicMetadata key )
+    public Exception getError( ArtifactMetadata key )
     {
         if ( _exceptions == null )
             return null;
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactBasicResults.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactBasicResults.java
index 4427b7f..482fcdb 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactBasicResults.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactBasicResults.java
@@ -23,7 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  *
@@ -34,12 +34,12 @@
 public class ArtifactBasicResults
 extends AbstractRepOpResult
 {
-  Map< ArtifactBasicMetadata, List<ArtifactBasicMetadata>> _result = new HashMap<ArtifactBasicMetadata, List<ArtifactBasicMetadata>>(8);
+  Map< ArtifactMetadata, List<ArtifactMetadata>> _result = new HashMap<ArtifactMetadata, List<ArtifactMetadata>>(8);
 
   /**
    * first result is ready 
    */
-  public ArtifactBasicResults( ArtifactBasicMetadata query, List<ArtifactBasicMetadata> result )
+  public ArtifactBasicResults( ArtifactMetadata query, List<ArtifactMetadata> result )
   {
     this._result.put( query, result );
   }
@@ -57,7 +57,7 @@
   {
   }
 
-  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactBasicMetadata key, final Exception err )
+  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactMetadata key, final Exception err )
   {
     ArtifactBasicResults ret = res;
     if( res == null )
@@ -68,7 +68,7 @@
     return ret;
   }
 
-  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactBasicMetadata key, final List<ArtifactBasicMetadata> result )
+  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactMetadata key, final List<ArtifactMetadata> result )
   {
     ArtifactBasicResults ret = res;
     if( res == null )
@@ -79,7 +79,7 @@
     return ret;
   }
 
-  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactBasicMetadata key, final ArtifactBasicMetadata result )
+  public static ArtifactBasicResults add( final ArtifactBasicResults res, final ArtifactMetadata key, final ArtifactMetadata result )
   {
     ArtifactBasicResults ret = res;
     if( res == null )
@@ -90,12 +90,12 @@
     return ret;
   }
   
-  private List<ArtifactBasicMetadata> getOrCreate( ArtifactBasicMetadata query )
+  private List<ArtifactMetadata> getOrCreate( ArtifactMetadata query )
   {
-    List<ArtifactBasicMetadata> res = _result.get( query );
+    List<ArtifactMetadata> res = _result.get( query );
     if( res == null )
     {
-      res = new ArrayList<ArtifactBasicMetadata>(8);
+      res = new ArrayList<ArtifactMetadata>(8);
       _result.put( query, res );
     }
     return res;
@@ -107,10 +107,10 @@
    * @param query
    * @param result
    */
-  public void add( ArtifactBasicMetadata query, List<ArtifactBasicMetadata> result )
+  public void add( ArtifactMetadata query, List<ArtifactMetadata> result )
   {
-    List<ArtifactBasicMetadata> res = getOrCreate( query );
-    for( ArtifactBasicMetadata r : result )
+    List<ArtifactMetadata> res = getOrCreate( query );
+    for( ArtifactMetadata r : result )
     {
       if( res.contains( r ) )
         continue;
@@ -119,18 +119,18 @@
     }
   }
   
-  public void add( ArtifactBasicMetadata query, ArtifactBasicMetadata result )
+  public void add( ArtifactMetadata query, ArtifactMetadata result )
   {
-    List<ArtifactBasicMetadata> res = getOrCreate( query );
+    List<ArtifactMetadata> res = getOrCreate( query );
     res.add( result );
   }
 
-  public Map< ArtifactBasicMetadata, List<ArtifactBasicMetadata>> getResults()
+  public Map< ArtifactMetadata, List<ArtifactMetadata>> getResults()
   {
     return _result;
   }
 
-  public List<ArtifactBasicMetadata> getResult( ArtifactBasicMetadata query )
+  public List<ArtifactMetadata> getResult( ArtifactMetadata query )
   {
     return _result.get( query );
   }
@@ -142,7 +142,7 @@
   }
 
   @Override
-  public boolean hasResults( ArtifactBasicMetadata key )
+  public boolean hasResults( ArtifactMetadata key )
   {
     return ! _result.isEmpty() && _result.containsKey( key ) && ! _result.get( key ).isEmpty();
   }
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java
index 99e1ef7..498dc7b 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ArtifactResults.java
@@ -24,7 +24,7 @@
 import java.util.Map;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  *
@@ -35,18 +35,18 @@
 public class ArtifactResults
 extends AbstractRepOpResult
 {
-  Map< ArtifactBasicMetadata, List<Artifact>> _result = new HashMap<ArtifactBasicMetadata, List<Artifact>>(8);
+  Map< ArtifactMetadata, List<Artifact>> _result = new HashMap<ArtifactMetadata, List<Artifact>>(8);
 
   public ArtifactResults()
   {
   }
   
-  public ArtifactResults( ArtifactBasicMetadata query, List<Artifact> result )
+  public ArtifactResults( ArtifactMetadata query, List<Artifact> result )
   {
     this._result.put( query, result );
   }
   
-  public void add( ArtifactBasicMetadata query, Artifact result )
+  public void add( ArtifactMetadata query, Artifact result )
   {
     List<Artifact> res = _result.get( query );
     if( res == null )
@@ -58,7 +58,7 @@
     res.add( result );
   }
   
-  public void addAll( ArtifactBasicMetadata query, List<Artifact> result )
+  public void addAll( ArtifactMetadata query, List<Artifact> result )
   {
     List<Artifact> res = _result.get( query );
     if( res == null )
@@ -70,12 +70,12 @@
     res.addAll( result );
   }
 
-  public Map< ArtifactBasicMetadata, List<Artifact>> getResults()
+  public Map< ArtifactMetadata, List<Artifact>> getResults()
   {
     return _result;
   }
 
-  public List<Artifact> getResults( ArtifactBasicMetadata query )
+  public List<Artifact> getResults( ArtifactMetadata query )
   {
     return _result.get( query );
   }
@@ -87,7 +87,7 @@
   }
 
   @Override
-  public boolean hasResults( ArtifactBasicMetadata key )
+  public boolean hasResults( ArtifactMetadata key )
   {
     return ! _result.isEmpty() && _result.containsKey( key ) && ! _result.get( key ).isEmpty();
   }
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
index 46da67f..6d910bd 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
@@ -18,8 +18,8 @@
  */
 package org.apache.maven.mercury.repository.api;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactCoordinates;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.event.EventGenerator;
 
 /**
@@ -86,7 +86,7 @@
    * @return found bytes or null, if no data was cached for this coordinates before
    * @throws MetadataCacheException
    */
-  public byte [] findRaw( ArtifactBasicMetadata bmd )
+  public byte [] findRaw( ArtifactMetadata bmd )
   throws MetadataCacheException;
 
   /**
@@ -98,6 +98,6 @@
    * @param rawBytes - bytes to cache
    * @throws MetadataCacheException
    */
-  public void saveRaw( ArtifactBasicMetadata bmd, byte [] rawBytes )
+  public void saveRaw( ArtifactMetadata bmd, byte [] rawBytes )
   throws MetadataCacheException;
 }
diff --git a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
index fbb8233..3506068 100644
--- a/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
+++ b/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryReader.java
@@ -20,7 +20,7 @@
 
 import java.util.Collection;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
@@ -48,7 +48,7 @@
    * it with hasExceptions() 
    * @throws RepositoryException
    */
-  public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+  public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
   throws RepositoryException;
   
   /**
@@ -60,7 +60,7 @@
    * @return result as a map GAV -> [GAV1, GAV2, ... GAVn]
    * @throws RepositoryException
    */
-  public ArtifactBasicResults readDependencies( Collection<ArtifactBasicMetadata> query )
+  public ArtifactBasicResults readDependencies( Collection<ArtifactMetadata> query )
   throws RepositoryException;
 
   /**
@@ -71,7 +71,7 @@
    * @return array of results - lists of available matches. Order is the same as in query list. null means not found or worse
    * @throws RepositoryException
    */
-  public ArtifactResults readArtifacts( Collection<ArtifactBasicMetadata> query )
+  public ArtifactResults readArtifacts( Collection<ArtifactMetadata> query )
   throws RepositoryException;
 
   /**
@@ -129,13 +129,13 @@
         return null;
       }
 
-      public ArtifactResults readArtifacts( Collection<ArtifactBasicMetadata> query )
+      public ArtifactResults readArtifacts( Collection<ArtifactMetadata> query )
       throws RepositoryException
       {
         return null;
       }
 
-      public ArtifactBasicResults readDependencies( Collection<ArtifactBasicMetadata> query )
+      public ArtifactBasicResults readDependencies( Collection<ArtifactMetadata> query )
           throws RepositoryException
       {
         return null;
@@ -153,7 +153,7 @@
         return null;
       }
 
-      public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+      public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
           throws RepositoryException
       {
         return null;
@@ -181,20 +181,20 @@
         return null;
       }
 
-      public byte[] readMetadata( ArtifactBasicMetadata bmd, boolean exempt  )
+      public byte[] readMetadata( ArtifactMetadata bmd, boolean exempt  )
       throws MetadataReaderException
       {
         return null;
       }
 
-      public byte[] readMetadata( ArtifactBasicMetadata bmd  )
+      public byte[] readMetadata( ArtifactMetadata bmd  )
       throws MetadataReaderException
       {
         return null;
       }
 
       public byte[] readRawData(
-          ArtifactBasicMetadata bmd,
+          ArtifactMetadata bmd,
           String classifier,
           String type,
           boolean exempt 
@@ -205,7 +205,7 @@
       }
 
       public byte[] readRawData(
-          ArtifactBasicMetadata bmd,
+          ArtifactMetadata bmd,
           String classifier,
           String type
           )
diff --git a/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java b/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
index a01c5c9..4c3e3be 100644
--- a/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
+++ b/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
@@ -24,11 +24,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactCoordinates;
-import org.apache.maven.mercury.artifact.Quality;
-import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.event.EventManager;
 import org.apache.maven.mercury.event.EventTypeEnum;
 import org.apache.maven.mercury.event.GenericEvent;
@@ -348,7 +345,7 @@
     }
   }
 
-  public byte[] findRaw( ArtifactBasicMetadata bmd )
+  public byte[] findRaw( ArtifactMetadata bmd )
   throws MetadataCacheException
   {
     GenericEvent event = null;
@@ -401,7 +398,7 @@
     }
   }
 
-  public void saveRaw( ArtifactBasicMetadata bmd, byte[] rawBytes )
+  public void saveRaw( ArtifactMetadata bmd, byte[] rawBytes )
   throws MetadataCacheException
   {
     GenericEvent event = null;
diff --git a/mercury-repo/mercury-repo-local-flat/src/main/java/org/apache/maven/mercury/repository/local/flat/ArtifactLocation.java b/mercury-repo/mercury-repo-local-flat/src/main/java/org/apache/maven/mercury/repository/local/flat/ArtifactLocation.java
index bf9e592..bb51fe8 100644
--- a/mercury-repo/mercury-repo-local-flat/src/main/java/org/apache/maven/mercury/repository/local/flat/ArtifactLocation.java
+++ b/mercury-repo/mercury-repo-local-flat/src/main/java/org/apache/maven/mercury/repository/local/flat/ArtifactLocation.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.mercury.repository.local.flat;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
 import org.apache.maven.mercury.util.FileUtil;
 
@@ -43,9 +43,9 @@
   private String classifier;
   private String type;
   
-  private ArtifactBasicMetadata bmd;
+  private ArtifactMetadata bmd;
   
-  public ArtifactLocation( String prefix, ArtifactBasicMetadata bmd )
+  public ArtifactLocation( String prefix, ArtifactMetadata bmd )
   {
     if( prefix == null || bmd == null || bmd.getGroupId() == null || bmd.getArtifactId() == null || bmd.getVersion() == null )
       return;
diff --git a/mercury-repo/mercury-repo-local-flat/src/test/java/org/apache/maven/mercury/repository/local/flat/LocalRepositoryFlatTest.java b/mercury-repo/mercury-repo-local-flat/src/test/java/org/apache/maven/mercury/repository/local/flat/LocalRepositoryFlatTest.java
index 05cc2e1..510f477 100644
--- a/mercury-repo/mercury-repo-local-flat/src/test/java/org/apache/maven/mercury/repository/local/flat/LocalRepositoryFlatTest.java
+++ b/mercury-repo/mercury-repo-local-flat/src/test/java/org/apache/maven/mercury/repository/local/flat/LocalRepositoryFlatTest.java
@@ -26,7 +26,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.logging.IMercuryLogger;
 import org.apache.maven.mercury.logging.MercuryLoggerManager;
@@ -66,7 +66,7 @@
     
     byte [] pomBlob = "pomblob".getBytes();
     
-    a = new DefaultArtifact( new ArtifactBasicMetadata("a:a:1.0.0") );
+    a = new DefaultArtifact( new ArtifactMetadata("a:a:1.0.0") );
     
     File ant = File.createTempFile( "test-flat", "-repo" );
     ant.deleteOnExit();
@@ -75,7 +75,7 @@
     a.setFile( ant );
     a.setPomBlob( pomBlob );
     
-    b = new DefaultArtifact( new ArtifactBasicMetadata("b:b:1.0.0") );
+    b = new DefaultArtifact( new ArtifactMetadata("b:b:1.0.0") );
     
     File antlr = File.createTempFile( "test-flat", "-repo" );
     antlr.deleteOnExit();
diff --git a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java
index 802ce52..26ca5a5 100644
--- a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java
+++ b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocation.java
@@ -19,7 +19,7 @@
 package org.apache.maven.mercury.repository.local.m2;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
 import org.apache.maven.mercury.util.FileUtil;
 
@@ -44,9 +44,9 @@
   private String classifier;
   private String type;
   
-  private ArtifactBasicMetadata bmd;
+  private ArtifactMetadata bmd;
   
-  public ArtifactLocation( String prefix, ArtifactBasicMetadata bmd )
+  public ArtifactLocation( String prefix, ArtifactMetadata bmd )
   {
     if( prefix == null || bmd == null || bmd.getGroupId() == null || bmd.getArtifactId() == null || bmd.getVersion() == null )
       return;
diff --git a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java
index ec78e7e..7a0535e 100644
--- a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java
+++ b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java
@@ -19,7 +19,6 @@
 package org.apache.maven.mercury.repository.local.m2;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -30,10 +29,9 @@
 import java.util.TreeSet;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.artifact.Quality;
-import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
 import org.apache.maven.mercury.artifact.version.VersionComparator;
 import org.apache.maven.mercury.artifact.version.VersionException;
 import org.apache.maven.mercury.artifact.version.VersionRange;
@@ -105,7 +103,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private static ArtifactLocation calculateLocation( String root, ArtifactBasicMetadata bmd, AbstractRepOpResult res )
+    private static ArtifactLocation calculateLocation( String root, ArtifactMetadata bmd, AbstractRepOpResult res )
     {
         ArtifactLocation loc = new ArtifactLocation( root, bmd );
 
@@ -195,7 +193,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    public ArtifactResults readArtifacts( Collection<ArtifactBasicMetadata> query )
+    public ArtifactResults readArtifacts( Collection<ArtifactMetadata> query )
         throws RepositoryException, IllegalArgumentException
     {
         if ( query == null || query.isEmpty() )
@@ -208,7 +206,7 @@
         if ( _repo.hasServer() && _repo.getServer().hasReaderStreamVerifierFactories() )
             vFacs = _repo.getServer().getReaderStreamVerifierFactories();
 
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             DefaultArtifact da = bmd instanceof DefaultArtifact ? (DefaultArtifact) bmd : new DefaultArtifact( bmd );
 
@@ -360,7 +358,7 @@
     /**
    * 
    */
-    public ArtifactBasicResults readDependencies( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readDependencies( Collection<ArtifactMetadata> query )
         throws RepositoryException, IllegalArgumentException
     {
         if ( query == null || query.size() < 1 )
@@ -369,7 +367,7 @@
         ArtifactBasicResults ror = null;
 
         File pomFile = null;
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             String pomPath =
                 bmd.getGroupId().replace( '.', '/' ) + "/" + bmd.getArtifactId() + "/" + ArtifactLocation.calculateVersionDir( bmd.getVersion() ) + "/"
@@ -385,7 +383,7 @@
 
             try
             {
-                List<ArtifactBasicMetadata> deps =
+                List<ArtifactMetadata> deps =
                     _mdProcessor.getDependencies( bmd, _mdReader == null ? this : _mdReader, System.getenv(),
                                                   System.getProperties() );
 // for(ArtifactBasicMetadata d : deps )
@@ -407,7 +405,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private static boolean findLatestSnapshot( final ArtifactBasicMetadata bmd, final ArtifactLocation loc, AbstractRepOpResult res )
+    private static boolean findLatestSnapshot( final ArtifactMetadata bmd, final ArtifactLocation loc, AbstractRepOpResult res )
     {
         File binary = new File( loc.getAbsPath() );
 
@@ -461,7 +459,7 @@
     /**
      * direct disk search, no redirects - I cannot process pom files :(
      */
-    public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
         throws RepositoryException, IllegalArgumentException
     {
         if ( query == null || query.size() < 1 )
@@ -470,7 +468,7 @@
         ArtifactBasicResults res = new ArtifactBasicResults( query.size() );
 
         File gaDir = null;
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             gaDir = new File( _repoDir, bmd.getGroupId().replace( '.', '/' ) + "/" + bmd.getArtifactId() );
             if ( !gaDir.exists() )
@@ -499,7 +497,7 @@
                 if ( loc == null )
                     continue;
 
-                ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+                ArtifactMetadata vmd = new ArtifactMetadata();
                 vmd.setGroupId( bmd.getGroupId() );
                 vmd.setArtifactId( bmd.getArtifactId() );
                 vmd.setClassifier( bmd.getClassifier() );
@@ -526,7 +524,7 @@
                 if ( !versionQuery.includes( vf.getName() ) )
                     continue;
 
-                ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+                ArtifactMetadata vmd = new ArtifactMetadata();
                 vmd.setGroupId( bmd.getGroupId() );
                 vmd.setArtifactId( bmd.getArtifactId() );
                 vmd.setClassifier( bmd.getClassifier() );
@@ -540,20 +538,20 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type )
         throws MetadataReaderException
     {
         return readRawData( bmd, classifier, type, false );
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type, boolean exempt )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type, boolean exempt )
         throws MetadataReaderException
     {
         return readRawData( relPathOf( bmd, classifier, type ), exempt );
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private static String relPathOf( ArtifactBasicMetadata bmd, String classifier, String type )
+    private static String relPathOf( ArtifactMetadata bmd, String classifier, String type )
     {
         String bmdPath =
             bmd.getGroupId().replace( '.', '/' ) + '/' + bmd.getArtifactId() + '/' + ArtifactLocation.calculateVersionDir( bmd.getVersion() );
diff --git a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocationtest.java b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocationtest.java
index df4104d..05c23ab 100644
--- a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocationtest.java
+++ b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/ArtifactLocationtest.java
@@ -19,10 +19,10 @@
 
 package org.apache.maven.mercury.repository.local.m2;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
-
 import junit.framework.TestCase;
 
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
+
 /**
  *
  *
@@ -42,21 +42,21 @@
     public void testChopTS()
     throws Exception
     {
-        ArtifactLocation loc = new ArtifactLocation( "test", new ArtifactBasicMetadata("a:a:3.0-alpha-1-20080920.015600-7") );
+        ArtifactLocation loc = new ArtifactLocation( "test", new ArtifactMetadata("a:a:3.0-alpha-1-20080920.015600-7") );
         
         String chop = loc.getVersionWithoutTS();
         
         assertEquals( "3.0-alpha-1", chop );
 
         
-        loc = new ArtifactLocation( "test", new ArtifactBasicMetadata("a:a:3.0-20080920.015600-7") );
+        loc = new ArtifactLocation( "test", new ArtifactMetadata("a:a:3.0-20080920.015600-7") );
         
         chop = loc.getVersionWithoutTS();
         
         assertEquals( "3.0", chop );
 
 
-        loc = new ArtifactLocation( "test", new ArtifactBasicMetadata("a:a:3.0-20080920.0156007") );
+        loc = new ArtifactLocation( "test", new ArtifactMetadata("a:a:3.0-20080920.0156007") );
         
         chop = loc.getVersionWithoutTS();
         
diff --git a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2Test.java b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2Test.java
index b7bc04f..45f2e73 100644
--- a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2Test.java
+++ b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2Test.java
@@ -25,7 +25,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.repository.api.ArtifactResults;
 
 /**
@@ -64,9 +64,9 @@
   {
     String artifactId = "a:a:4";
     
-    ArtifactBasicMetadata bmd = new ArtifactBasicMetadata(artifactId);
+    ArtifactMetadata bmd = new ArtifactMetadata(artifactId);
     
-    ArrayList<ArtifactBasicMetadata> q = new ArrayList<ArtifactBasicMetadata>();
+    ArrayList<ArtifactMetadata> q = new ArrayList<ArtifactMetadata>();
     
     q.add( bmd );
     
diff --git a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/MetadataProcessorMock.java b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/MetadataProcessorMock.java
index 6fe660b..82ca18f 100644
--- a/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/MetadataProcessorMock.java
+++ b/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/MetadataProcessorMock.java
@@ -25,7 +25,7 @@
 import java.util.Map;
 
 import org.apache.commons.digester.Digester;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
@@ -43,10 +43,10 @@
 implements DependencyProcessor
 {
 
-  public List<ArtifactBasicMetadata> getDependencies( ArtifactBasicMetadata bmd, MetadataReader mdReader, Map env, Map sysProps )
+  public List<ArtifactMetadata> getDependencies( ArtifactMetadata bmd, MetadataReader mdReader, Map env, Map sysProps )
   throws MetadataReaderException
   {
-    List<ArtifactBasicMetadata> deps = null;
+    List<ArtifactMetadata> deps = null;
     
     try
     {
@@ -65,7 +65,7 @@
     }
   }
   
-  private static final List<ArtifactBasicMetadata> getDeps( byte [] pom )
+  private static final List<ArtifactMetadata> getDeps( byte [] pom )
   throws IOException, SAXException
   {
     if( pom == null )
@@ -92,11 +92,11 @@
 //==============================================================================================
 class DependencyCreator
 {
-  List<ArtifactBasicMetadata> mds = new ArrayList<ArtifactBasicMetadata>(8);
+  List<ArtifactMetadata> mds = new ArrayList<ArtifactMetadata>(8);
   
   public void addMD( String g, String a, String v, String t, String s, String o)
   {
-    ArtifactBasicMetadata md = new ArtifactBasicMetadata();
+    ArtifactMetadata md = new ArtifactMetadata();
     md.setGroupId(g);
     md.setArtifactId(a);
     md.setVersion(v);
diff --git a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/DefaultStorage.java b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/DefaultStorage.java
index 85fd14b..0751efc 100644
--- a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/DefaultStorage.java
+++ b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/DefaultStorage.java
@@ -6,7 +6,7 @@
 import java.util.Map;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.util.FileUtil;
 import org.apache.maven.mercury.util.Util;
 import org.codehaus.plexus.lang.DefaultLanguage;
@@ -67,7 +67,7 @@
         this( null );
     }
 
-    public void add( ArtifactBasicMetadata bmd, Artifact artifact )
+    public void add( ArtifactMetadata bmd, Artifact artifact )
     {
         if( _artifacts == null )
             _artifacts = new HashMap<String, Artifact>(32);
@@ -75,7 +75,7 @@
         _artifacts.put( bmd.toString(), artifact );
     }
 
-    public Artifact findArtifact( ArtifactBasicMetadata bmd )
+    public Artifact findArtifact( ArtifactMetadata bmd )
     {
         if( _artifacts == null )
             return null;
diff --git a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryReaderMap.java b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryReaderMap.java
index 9ca5928..88f1e0f 100644
--- a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryReaderMap.java
+++ b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryReaderMap.java
@@ -22,7 +22,7 @@
 import java.util.List;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
@@ -82,7 +82,7 @@
         return _protocols;
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public ArtifactResults readArtifacts( Collection<ArtifactBasicMetadata> query )
+    public ArtifactResults readArtifacts( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         if( Util.isEmpty( query ) )
@@ -93,7 +93,7 @@
         
         ArtifactResults res = new ArtifactResults();
         
-        for( ArtifactBasicMetadata bmd : query )
+        for( ArtifactMetadata bmd : query )
         {
             Artifact a;
             try
@@ -131,13 +131,13 @@
         }
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type )
         throws MetadataReaderException
     {
         return readRawData( bmd, classifier, type, false );
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type, boolean exempt )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type, boolean exempt )
         throws MetadataReaderException
     {
         
@@ -151,7 +151,7 @@
         return readRawData( key, exempt );
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public ArtifactBasicResults readDependencies( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readDependencies( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         if( Util.isEmpty( query ) )
@@ -161,13 +161,13 @@
         
         ArtifactBasicResults res = new ArtifactBasicResults( query.size() );
         
-        for( ArtifactBasicMetadata bmd : query )
+        for( ArtifactMetadata bmd : query )
         {
             try
             {
                 MetadataReader mdr = _repo._mdReader == null ? this : _repo._mdReader;
                 
-                List<ArtifactBasicMetadata> deps = dp.getDependencies( bmd, mdr, System.getenv(), System.getProperties() );
+                List<ArtifactMetadata> deps = dp.getDependencies( bmd, mdr, System.getenv(), System.getProperties() );
                 
                 res.add( bmd, deps );
             }
@@ -182,7 +182,7 @@
         return res;
     }
     // ---------------------------------------------------------------------------------------------------------------
-    public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         return null;
diff --git a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/Storage.java b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/Storage.java
index 713beb9..5a0d488 100644
--- a/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/Storage.java
+++ b/mercury-repo/mercury-repo-local-map/src/main/java/org/apache/maven/mercury/repository/local/map/Storage.java
@@ -3,7 +3,7 @@
 import java.io.File;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 
 /**
  * storage for the repository
@@ -20,7 +20,7 @@
      * @param bmd metadata
      * @param artifact artifact behind it
      */
-    public abstract void add( ArtifactBasicMetadata bmd, Artifact artifact );
+    public abstract void add( ArtifactMetadata bmd, Artifact artifact );
 
     /**
      * find an artifact by it's metadata
@@ -28,7 +28,7 @@
      * @param bmd
      * @return
      */
-    public abstract Artifact findArtifact( ArtifactBasicMetadata bmd );
+    public abstract Artifact findArtifact( ArtifactMetadata bmd );
 
     /**
      * find raw data in this stotage
diff --git a/mercury-repo/mercury-repo-local-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryMapTest.java b/mercury-repo/mercury-repo-local-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryMapTest.java
index b40f2ad..15c72db 100644
--- a/mercury-repo/mercury-repo-local-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryMapTest.java
+++ b/mercury-repo/mercury-repo-local-map/src/test/java/org/apache/maven/mercury/repository/local/map/LocalRepositoryMapTest.java
@@ -26,7 +26,7 @@
 
 import junit.framework.TestCase;
 
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
 import org.apache.maven.mercury.repository.api.RepositoryReader;
@@ -48,7 +48,7 @@
     
     RepositoryReader _rr;
     
-    ArtifactBasicMetadata bmd;
+    ArtifactMetadata bmd;
     
     File _pom;
 
@@ -56,7 +56,7 @@
     protected void setUp()
         throws Exception
     {
-        bmd = new ArtifactBasicMetadata("t:t:1.0::pom");
+        bmd = new ArtifactMetadata("t:t:1.0::pom");
         
         _pom = new File("./target/test-classes/t-1.0.pom");
 
@@ -84,7 +84,7 @@
     public void testReadMap()
         throws Exception
     {
-        Collection<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>(1);
+        Collection<ArtifactMetadata> query = new ArrayList<ArtifactMetadata>(1);
         
         query.add( bmd );
         
@@ -96,13 +96,13 @@
         
         assertTrue( res.hasResults() );
         
-        Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>>  deps = res.getResults();
+        Map<ArtifactMetadata, List<ArtifactMetadata>>  deps = res.getResults();
         
         assertNotNull( deps );
         
         assertEquals( 1, deps.size() );
         
-        List<ArtifactBasicMetadata> myDeps = deps.get( bmd );
+        List<ArtifactMetadata> myDeps = deps.get( bmd );
         
         assertNotNull( myDeps );
         
diff --git a/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java b/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
index 8124b13..bc28740 100644
--- a/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
+++ b/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
@@ -32,8 +32,8 @@
 import java.util.TreeSet;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactCoordinates;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.artifact.Quality;
 import org.apache.maven.mercury.artifact.QualityEnum;
@@ -77,7 +77,6 @@
 import org.apache.maven.mercury.util.Util;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
-import org.mortbay.log.Log;
 
 /**
  * implementation of M2 remote repository reader. Actual Transport (protocol, URL) [should] come from RemoteRepository
@@ -181,7 +180,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private final ArtifactLocation calculateLocation( String root, ArtifactBasicMetadata bmd, AbstractRepOpResult res )
+    private final ArtifactLocation calculateLocation( String root, ArtifactMetadata bmd, AbstractRepOpResult res )
         throws RepositoryException, MetadataReaderException, MetadataException
     {
         ArtifactLocation loc = new ArtifactLocation( root, bmd );
@@ -248,7 +247,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private Collection<String> getCachedSnapshots( ArtifactBasicMetadata bmd, ArtifactLocation loc )
+    private Collection<String> getCachedSnapshots( ArtifactMetadata bmd, ArtifactLocation loc )
         throws MetadataCacheException, RepositoryException, MetadataReaderException, MetadataException
     {
         RepositoryGAVMetadata gavm = null;
@@ -305,7 +304,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private boolean findLatestSnapshot( ArtifactBasicMetadata bmd, ArtifactLocation loc, AbstractRepOpResult res )
+    private boolean findLatestSnapshot( ArtifactMetadata bmd, ArtifactLocation loc, AbstractRepOpResult res )
         throws MetadataReaderException, MetadataException, RemoteRepositoryM2OperationException
     {
         DefaultArtifactVersion dav = new DefaultArtifactVersion( loc.getVersion() );
@@ -354,7 +353,7 @@
     /**
      * TODO og: parallelize as soon as code stabilizes
      */
-    public ArtifactResults readArtifacts( Collection<ArtifactBasicMetadata> query )
+    public ArtifactResults readArtifacts( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         if ( query == null || query.size() < 1 )
@@ -362,7 +361,7 @@
 
         ArtifactResults res = new ArtifactResults();
 
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             try
             {
@@ -388,7 +387,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    public void readArtifact( ArtifactBasicMetadata bmd, ArtifactResults res )
+    public void readArtifact( ArtifactMetadata bmd, ArtifactResults res )
         throws IOException, RepositoryException, MetadataReaderException, MetadataException
     {
         DefaultArtifact da = bmd instanceof DefaultArtifact ? (DefaultArtifact) bmd : new DefaultArtifact( bmd );
@@ -441,7 +440,7 @@
     /**
    * 
    */
-    public ArtifactBasicResults readDependencies( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readDependencies( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         if ( query == null || query.size() < 1 )
@@ -449,11 +448,11 @@
 
         ArtifactBasicResults ror = new ArtifactBasicResults( 16 );
 
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             try
             {
-                List<ArtifactBasicMetadata> deps =
+                List<ArtifactMetadata> deps =
                     _mdProcessor.getDependencies( bmd, _mdReader == null ? this : _mdReader, System.getenv(),
                                                   System.getProperties() );
                 ror.add( bmd, deps );
@@ -470,7 +469,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private TreeSet<String> getCachedVersions( ArtifactLocation loc, ArtifactBasicMetadata bmd, AbstractRepOpResult res )
+    private TreeSet<String> getCachedVersions( ArtifactLocation loc, ArtifactMetadata bmd, AbstractRepOpResult res )
         throws MetadataException, MetadataReaderException, MetadataCacheException
     {
         RepositoryGAMetadata gam = null;
@@ -633,7 +632,7 @@
             if ( foundSnapshot )
             {
                 boolean snFound = false;
-                ArtifactBasicMetadata snMd = new ArtifactBasicMetadata( bmd.toString() );
+                ArtifactMetadata snMd = new ArtifactMetadata( bmd.toString() );
                 snMd.setVersion( v );
                 ArtifactLocation snLoc = new ArtifactLocation( loc.getPrefix(), snMd );
                 try
@@ -698,7 +697,7 @@
     /**
      * direct metadata search, no redirects, first attempt
      */
-    public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
         throws RepositoryException
     {
         if ( query == null || query.size() < 1 )
@@ -708,7 +707,7 @@
 
         String root = _repo.getServer().getURL().toString();
 
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             ArtifactLocation loc = new ArtifactLocation( root, bmd );
 
@@ -785,7 +784,7 @@
 
                 if ( found != null )
                 {
-                    ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+                    ArtifactMetadata vmd = new ArtifactMetadata();
                     vmd.setGroupId( bmd.getGroupId() );
                     vmd.setArtifactId( bmd.getArtifactId() );
                     vmd.setClassifier( bmd.getClassifier() );
@@ -819,7 +818,7 @@
                 if ( !versionQuery.includes( version ) )
                     continue;
 
-                ArtifactBasicMetadata vmd = new ArtifactBasicMetadata();
+                ArtifactMetadata vmd = new ArtifactMetadata();
                 vmd.setGroupId( bmd.getGroupId() );
                 vmd.setArtifactId( bmd.getArtifactId() );
                 vmd.setClassifier( bmd.getClassifier() );
@@ -835,18 +834,18 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type )
         throws MetadataReaderException
     {
         return readRawData( bmd, classifier, type, false );
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type, boolean exempt )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type, boolean exempt )
         throws MetadataReaderException
     {
         byte[] res = null;
-        ArtifactBasicMetadata mod = null;
+        ArtifactMetadata mod = null;
 
         // if( _log.isDebugEnabled() )
         // _log.debug( "reading "+bmd+" from " + _repo.getId() );
@@ -854,7 +853,7 @@
         // only cache poms at the moment
         if ( _mdCache != null && "pom".equals( type ) )
         {
-            mod = new ArtifactBasicMetadata();
+            mod = new ArtifactMetadata();
             mod.setGroupId( bmd.getGroupId() );
             mod.setArtifactId( bmd.getArtifactId() );
             mod.setVersion( ArtifactLocation.calculateVersionDir( bmd.getVersion() ) );
@@ -879,7 +878,7 @@
         }
 
         mod =
-            new ArtifactBasicMetadata( bmd.getGroupId() + ":" + bmd.getArtifactId() + ":" + bmd.getVersion() + ":"
+            new ArtifactMetadata( bmd.getGroupId() + ":" + bmd.getArtifactId() + ":" + bmd.getVersion() + ":"
                 + ( classifier == null ? "" : classifier ) + ":" + ( type == null ? bmd.getType() : type ) );
 
         // ArtifactLocation loc = new ArtifactLocation( "", mod );
diff --git a/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryWriterM2.java b/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryWriterM2.java
index e3957f1..8008b04 100644
--- a/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryWriterM2.java
+++ b/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryWriterM2.java
@@ -42,7 +42,6 @@
 import org.apache.maven.mercury.repository.api.RemoteRepository;
 import org.apache.maven.mercury.repository.api.Repository;
 import org.apache.maven.mercury.repository.api.RepositoryException;
-import org.apache.maven.mercury.repository.api.RepositoryGAMetadata;
 import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata;
 import org.apache.maven.mercury.repository.api.RepositoryReader;
 import org.apache.maven.mercury.repository.api.RepositoryWriter;
diff --git a/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java b/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
index 8e428dd..168fb76 100644
--- a/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
+++ b/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
@@ -29,16 +29,12 @@
 import java.util.TreeSet;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.Quality;
 import org.apache.maven.mercury.artifact.api.ArtifactListProcessor;
 import org.apache.maven.mercury.artifact.api.ArtifactListProcessorException;
 import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
 import org.apache.maven.mercury.artifact.version.MetadataVersionComparator;
-import org.apache.maven.mercury.artifact.version.VersionException;
-import org.apache.maven.mercury.artifact.version.VersionRange;
-import org.apache.maven.mercury.artifact.version.VersionRangeFactory;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
 import org.apache.maven.mercury.event.EventGenerator;
@@ -270,7 +266,7 @@
     }
 
     // ----------------------------------------------------------------------------------------------------------------------------
-    public ArtifactBasicResults readVersions( Collection<ArtifactBasicMetadata> query )
+    public ArtifactBasicResults readVersions( Collection<ArtifactMetadata> query )
         throws IllegalArgumentException, RepositoryException
     {
         if ( query == null )
@@ -295,7 +291,7 @@
 
             GenericEvent eventRead = null;
 
-            List<ArtifactBasicMetadata> qList = new ArrayList<ArtifactBasicMetadata>( query.size() );
+            List<ArtifactMetadata> qList = new ArrayList<ArtifactMetadata>( query.size() );
             qList.addAll( query );
 
             for ( RepositoryReader rr : _repositoryReaders )
@@ -327,9 +323,9 @@
 
                     if ( repoRes != null && repoRes.hasResults() )
                     {
-                        for ( ArtifactBasicMetadata key : repoRes.getResults().keySet() )
+                        for ( ArtifactMetadata key : repoRes.getResults().keySet() )
                         {
-                            List<ArtifactBasicMetadata> rorRes = repoRes.getResult( key );
+                            List<ArtifactMetadata> rorRes = repoRes.getResult( key );
 
                             if ( tp != null )
                             {
@@ -350,7 +346,7 @@
                                 continue;
                             }
 
-                            for ( ArtifactBasicMetadata bmd : rorRes )
+                            for ( ArtifactMetadata bmd : rorRes )
                             {
                                 bmd.setTracker( rr );
                             }
@@ -433,25 +429,25 @@
             return;
         }
 
-        Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata> > m = res.getResults();
+        Map<ArtifactMetadata, List<ArtifactMetadata> > m = res.getResults();
 
-        for ( ArtifactBasicMetadata key : m.keySet() )
+        for ( ArtifactMetadata key : m.keySet() )
         {
             processSingletons( key, res.getResult( key ) );
         }
     }
 
-    private void processSingletons( ArtifactBasicMetadata key, List<ArtifactBasicMetadata> res )
+    private void processSingletons( ArtifactMetadata key, List<ArtifactMetadata> res )
     {
         if ( Util.isEmpty( res ) || !DefaultArtifactVersion.isVirtual( key.getVersion() ) )
         {
             return;
         }
 
-        TreeSet<ArtifactBasicMetadata> ts = new TreeSet<ArtifactBasicMetadata>(
-                        new Comparator<ArtifactBasicMetadata>()
+        TreeSet<ArtifactMetadata> ts = new TreeSet<ArtifactMetadata>(
+                        new Comparator<ArtifactMetadata>()
                         {
-                            public int compare( ArtifactBasicMetadata o1, ArtifactBasicMetadata o2 )
+                            public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
                             {
                                   DefaultArtifactVersion av1 = new DefaultArtifactVersion( o1.getVersion() );
                                   DefaultArtifactVersion av2 = new DefaultArtifactVersion( o2.getVersion() );
@@ -463,7 +459,7 @@
                                                                               );
         ts.addAll( res );
 
-        ArtifactBasicMetadata single = ts.last();
+        ArtifactMetadata single = ts.last();
 
         res.clear();
 
@@ -471,7 +467,7 @@
     }
 
     //----------------------------------------------------------------------------------------------------------------------------
-    public ArtifactMetadata readDependencies( ArtifactBasicMetadata bmd )
+    public ArtifactMetadata readDependencies( ArtifactMetadata bmd )
         throws IllegalArgumentException, RepositoryException
     {
         if ( bmd == null )
@@ -491,7 +487,7 @@
 
             init();
 
-            List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+            List<ArtifactMetadata> query = new ArrayList<ArtifactMetadata>( 1 );
             query.add( bmd );
 
             ArtifactMetadata md = new ArtifactMetadata( bmd );
@@ -581,13 +577,13 @@
     /**
      * split query into repository buckets
      */
-    private Map<RepositoryReader, List<ArtifactBasicMetadata>> sortByRepo( Collection<? extends ArtifactBasicMetadata> query )
+    private Map<RepositoryReader, List<ArtifactMetadata>> sortByRepo( Collection<? extends ArtifactMetadata> query )
     {
-        HashMap<RepositoryReader, List<ArtifactBasicMetadata>> res = null;
+        HashMap<RepositoryReader, List<ArtifactMetadata>> res = null;
 
-        List<ArtifactBasicMetadata> rejects = null;
+        List<ArtifactMetadata> rejects = null;
 
-        for ( ArtifactBasicMetadata bmd : query )
+        for ( ArtifactMetadata bmd : query )
         {
             Object tracker = bmd.getTracker();
 
@@ -598,14 +594,14 @@
 
                 if ( res == null )
                 {
-                    res = new HashMap<RepositoryReader, List<ArtifactBasicMetadata>>();
+                    res = new HashMap<RepositoryReader, List<ArtifactMetadata>>();
                 }
 
-                List<ArtifactBasicMetadata> rl = res.get( rr );
+                List<ArtifactMetadata> rl = res.get( rr );
 
                 if ( rl == null )
                 {
-                    rl = new ArrayList<ArtifactBasicMetadata>();
+                    rl = new ArrayList<ArtifactMetadata>();
                     res.put( rr, rl );
                 }
 
@@ -616,7 +612,7 @@
             {
                 if ( rejects == null )
                 {
-                    rejects = new ArrayList<ArtifactBasicMetadata>();
+                    rejects = new ArrayList<ArtifactMetadata>();
                 }
 
                 rejects.add( bmd );
@@ -627,7 +623,7 @@
         {
             if ( res == null )
             {
-                res = new HashMap<RepositoryReader, List<ArtifactBasicMetadata>>();
+                res = new HashMap<RepositoryReader, List<ArtifactMetadata>>();
             }
 
             res.put( RepositoryReader.NULL_READER, rejects );
@@ -637,7 +633,7 @@
     }
 
     // ----------------------------------------------------------------------------------------------------------------------------
-    public ArtifactResults readArtifacts( Collection<? extends ArtifactBasicMetadata> query )
+    public ArtifactResults readArtifacts( Collection<? extends ArtifactMetadata> query )
         throws RepositoryException
     {
         GenericEvent event = null;
@@ -656,9 +652,9 @@
                 return res;
             }
 
-            Map<RepositoryReader, List<ArtifactBasicMetadata>> buckets = sortByRepo( query );
+            Map<RepositoryReader, List<ArtifactMetadata>> buckets = sortByRepo( query );
 
-            List<ArtifactBasicMetadata> leftovers = buckets == null ? null : buckets.get( RepositoryReader.NULL_READER );
+            List<ArtifactMetadata> leftovers = buckets == null ? null : buckets.get( RepositoryReader.NULL_READER );
 
             if ( buckets == null )
             {
@@ -690,7 +686,7 @@
                                               EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED, repoId );
                     }
 
-                    List<ArtifactBasicMetadata> rrQuery = buckets.get( rr );
+                    List<ArtifactMetadata> rrQuery = buckets.get( rr );
 
                     ArtifactResults rrRes = rr.readArtifacts( rrQuery );
 
@@ -703,7 +699,7 @@
 
                     if ( rrRes.hasResults() )
                     {
-                        for ( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
+                        for ( ArtifactMetadata bm : rrRes.getResults().keySet() )
                         {
                             List<Artifact> al = rrRes.getResults( bm );
 
@@ -735,15 +731,15 @@
             // then process unqualified virtuals
             if ( !Util.isEmpty( leftovers ) )
             {
-                List<ArtifactBasicMetadata> virtuals = null;
+                List<ArtifactMetadata> virtuals = null;
 
-                for ( ArtifactBasicMetadata md : leftovers )
+                for ( ArtifactMetadata md : leftovers )
                 {
                     if ( DefaultArtifactVersion.isVirtual( md.getVersion() ) )
                     {
                         if ( virtuals == null )
                         {
-                            virtuals = new ArrayList<ArtifactBasicMetadata>();
+                            virtuals = new ArrayList<ArtifactMetadata>();
                         }
 
                         virtuals.add( md );
@@ -763,11 +759,11 @@
                     {
                         if ( virtRes.hasResults() )
                         {
-                            Map<ArtifactBasicMetadata, ArtifactBasicMetadata> sMap = new HashMap<ArtifactBasicMetadata, ArtifactBasicMetadata>();
+                            Map<ArtifactMetadata, ArtifactMetadata> sMap = new HashMap<ArtifactMetadata, ArtifactMetadata>();
 
-                            for ( ArtifactBasicMetadata md : virtRes.getResults().keySet() )
+                            for ( ArtifactMetadata md : virtRes.getResults().keySet() )
                             {
-                                ArtifactBasicMetadata v = virtRes.getResult( md ).get( 0 );
+                                ArtifactMetadata v = virtRes.getResult( md ).get( 0 );
                                 virtuals.add( v );
                                 sMap.put( v, md );
                             }
@@ -778,10 +774,10 @@
                             {
                                 if ( ares.hasResults() )
                                 {
-                                    Map<ArtifactBasicMetadata, List<Artifact>> aresMap = ares.getResults();
+                                    Map<ArtifactMetadata, List<Artifact>> aresMap = ares.getResults();
 
                                     // remap
-                                    for ( ArtifactBasicMetadata md : aresMap.keySet() )
+                                    for ( ArtifactMetadata md : aresMap.keySet() )
                                     {
                                         res.add( sMap.get( md ), aresMap.get( md ).get( 0 ) );
                                     }
@@ -839,7 +835,7 @@
                         }
                         else if ( rrRes.hasResults() )
                         {
-                            for ( ArtifactBasicMetadata bm : rrRes.getResults().keySet() )
+                            for ( ArtifactMetadata bm : rrRes.getResults().keySet() )
                             {
                                 List<Artifact> al = rrRes.getResults( bm );
 
@@ -887,13 +883,13 @@
     // ----------------------------------------------------------------------------------------------------------------------------
     // MetadataReader implementation
     // ----------------------------------------------------------------------------------------------------------------------------
-    public byte[] readMetadata( ArtifactBasicMetadata bmd )
+    public byte[] readMetadata( ArtifactMetadata bmd )
         throws MetadataReaderException
     {
         return readMetadata( bmd, false );
     }
 
-    public byte[] readMetadata( ArtifactBasicMetadata bmd, boolean exempt  )
+    public byte[] readMetadata( ArtifactMetadata bmd, boolean exempt  )
         throws MetadataReaderException
     {
         if ( LOG.isDebugEnabled() )
@@ -909,13 +905,13 @@
     // ----------------------------------------------------------------------------------------------------------------------------
     // MetadataReader implementation
     // ----------------------------------------------------------------------------------------------------------------------------
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type )
         throws MetadataReaderException
     {
         return readRawData( bmd, classifier, type, false );
     }
 
-    public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type, boolean exempt )
+    public byte[] readRawData( ArtifactMetadata bmd, String classifier, String type, boolean exempt )
         throws MetadataReaderException
     {
 
@@ -942,7 +938,7 @@
                 event = new GenericEvent( EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW, eventTag );
             }
             
-            ArtifactBasicMetadata bmdQuery = bmd;
+            ArtifactMetadata bmdQuery = bmd;
 
             try
             {
@@ -963,9 +959,9 @@
 
             if ( Quality.SNAPSHOT_QUALITY.equals( vq ) )
             {
-                List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+                List<ArtifactMetadata> query = new ArrayList<ArtifactMetadata>( 1 );
                 
-                ArtifactBasicMetadata nBmd = new ArtifactBasicMetadata( bmd.toString() );
+                ArtifactMetadata nBmd = new ArtifactMetadata( bmd.toString() );
                 
                 if( !Util.isEmpty( type ))
                     nBmd.setType( type );
@@ -988,10 +984,10 @@
 
                     if ( vRes.hasResults( nBmd ) )
                     {
-                        List<ArtifactBasicMetadata> versions = vRes.getResult( nBmd );
+                        List<ArtifactMetadata> versions = vRes.getResult( nBmd );
 
-                        TreeSet<ArtifactBasicMetadata> snapshots =
-                            new TreeSet<ArtifactBasicMetadata>( new MetadataVersionComparator() );
+                        TreeSet<ArtifactMetadata> snapshots =
+                            new TreeSet<ArtifactMetadata>( new MetadataVersionComparator() );
                         snapshots.addAll( versions );
 
                         bmdQuery = snapshots.last();
diff --git a/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java b/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java
index 30849dd..0ad7d87 100644
--- a/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java
+++ b/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java
@@ -27,7 +27,7 @@
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.artifact.Artifact;
-import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
 import org.apache.maven.mercury.event.MercuryEvent;
 import org.apache.maven.mercury.event.MercuryEventListener;
@@ -148,8 +148,8 @@
     public void testReadSnapshot()
         throws Exception
     {
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata( _artifactCoordSn );
-        List<ArtifactBasicMetadata> q = new ArrayList<ArtifactBasicMetadata>();
+        ArtifactMetadata bmd = new ArtifactMetadata( _artifactCoordSn );
+        List<ArtifactMetadata> q = new ArrayList<ArtifactMetadata>();
         q.add( bmd );
 
         ArtifactResults res = _vr.readArtifacts( q );
@@ -162,7 +162,7 @@
 
         assertTrue( res.hasResults( bmd ) );
 
-        Map<ArtifactBasicMetadata, List<Artifact>> m = res.getResults();
+        Map<ArtifactMetadata, List<Artifact>> m = res.getResults();
 
         List<Artifact> al = m.get( bmd );
 
@@ -191,7 +191,7 @@
     public void testWrite()
         throws Exception
     {
-        Artifact a = new DefaultArtifact( new ArtifactBasicMetadata( "a:a:1.0:text:txt" ) );
+        Artifact a = new DefaultArtifact( new ArtifactMetadata( "a:a:1.0:text:txt" ) );
         File bin = File.createTempFile( "vr-", "-test.txt" );
         bin.deleteOnExit();
         FileUtil.writeRawData( bin, "test" );
@@ -213,8 +213,8 @@
     public void testReadRelease()
         throws Exception
     {
-        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata( _artifactCoordRelease );
-        List<ArtifactBasicMetadata> q = new ArrayList<ArtifactBasicMetadata>();
+        ArtifactMetadata bmd = new ArtifactMetadata( _artifactCoordRelease );
+        List<ArtifactMetadata> q = new ArrayList<ArtifactMetadata>();
         q.add( bmd );
 
         Listener l = new Listener();
diff --git a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java
index 5f69074..75700bf 100644
--- a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java
+++ b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java
@@ -21,8 +21,6 @@
 
 import java.util.Map;
 
-import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
-
 import org.mortbay.io.Buffer;
 import org.mortbay.jetty.client.HttpClient;
 import org.mortbay.jetty.client.HttpExchange;
diff --git a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
index 8a8eff7..eb116fe 100644
--- a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
+++ b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
@@ -27,13 +27,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
-
 import org.apache.maven.mercury.crypto.api.StreamObserver;
 import org.apache.maven.mercury.logging.IMercuryLogger;
 import org.apache.maven.mercury.logging.MercuryLoggerManager;
 import org.apache.maven.mercury.spi.http.client.FileExchange;
 import org.apache.maven.mercury.spi.http.client.HttpClientException;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
 import org.apache.maven.mercury.spi.http.client.ObservableInputStream;
 import org.apache.maven.mercury.transport.api.Binding;
 import org.apache.maven.mercury.transport.api.Server;
diff --git a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
index 8d2ea2e..0030eed 100644
--- a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
+++ b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
@@ -28,13 +28,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
-
 import org.apache.maven.mercury.crypto.api.StreamObserver;
 import org.apache.maven.mercury.logging.IMercuryLogger;
 import org.apache.maven.mercury.logging.MercuryLoggerManager;
 import org.apache.maven.mercury.spi.http.client.FileExchange;
 import org.apache.maven.mercury.spi.http.client.HttpClientException;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
 import org.apache.maven.mercury.spi.http.client.ObservableOutputStream;
 import org.apache.maven.mercury.transport.api.Binding;
 import org.apache.maven.mercury.transport.api.Server;
diff --git a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
index a9accc5..8e3b7fe 100644
--- a/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
+++ b/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
@@ -30,8 +30,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
-
 import org.apache.maven.mercury.crypto.api.StreamObserver;
 import org.apache.maven.mercury.crypto.api.StreamVerifier;
 import org.apache.maven.mercury.crypto.api.StreamVerifierException;
@@ -39,6 +37,7 @@
 import org.apache.maven.mercury.logging.MercuryLoggerManager;
 import org.apache.maven.mercury.spi.http.client.FileExchange;
 import org.apache.maven.mercury.spi.http.client.HttpClientException;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
 import org.apache.maven.mercury.spi.http.client.SecureSender;
 import org.apache.maven.mercury.spi.http.validate.Validator;
 import org.apache.maven.mercury.transport.api.Binding;