[maven-release-plugin]  copy for tag mercury-1.0-alpha-5

git-svn-id: https://svn.apache.org/repos/asf/maven/mercury/tags/mercury-1.0-alpha-5@743215 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mercury-artifact/pom.xml b/mercury-artifact/pom.xml
index 91d4507..d4d8330 100644
--- a/mercury-artifact/pom.xml
+++ b/mercury-artifact/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-artifact</artifactId>
 
diff --git a/mercury-crypto/mercury-crypto-api/pom.xml b/mercury-crypto/mercury-crypto-api/pom.xml
index 80bc008..2bc16e9 100644
--- a/mercury-crypto/mercury-crypto-api/pom.xml
+++ b/mercury-crypto/mercury-crypto-api/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-crypto</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-crypto-api</artifactId>
diff --git a/mercury-crypto/mercury-crypto-basic/pom.xml b/mercury-crypto/mercury-crypto-basic/pom.xml
index 3f9d961..8dd1d2b 100644
--- a/mercury-crypto/mercury-crypto-basic/pom.xml
+++ b/mercury-crypto/mercury-crypto-basic/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-crypto</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-crypto-basic</artifactId>
diff --git a/mercury-crypto/pom.xml b/mercury-crypto/pom.xml
index 6d3a810..60c9fdc 100644
--- a/mercury-crypto/pom.xml
+++ b/mercury-crypto/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-crypto</artifactId>
   <packaging>pom</packaging>
diff --git a/mercury-event/pom.xml b/mercury-event/pom.xml
index 200c3cc..f35b141 100644
--- a/mercury-event/pom.xml
+++ b/mercury-event/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-event</artifactId>
 
diff --git a/mercury-external/pom.xml b/mercury-external/pom.xml
index be390ba..37a845b 100644
--- a/mercury-external/pom.xml
+++ b/mercury-external/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <groupId>org.apache.maven.mercury</groupId>
 
diff --git a/mercury-it/pom.xml b/mercury-it/pom.xml
index a64cba0..be92a36 100644
--- a/mercury-it/pom.xml
+++ b/mercury-it/pom.xml
@@ -215,25 +215,105 @@
     </testResources>
 
     <plugins>
+
+
       <plugin>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <version>2.0</version>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+
+        <configuration>
+          <includes>
+            <include>org/apache/maven/mercury/all/it/AllTestCases.java</include>
+          </includes>
+        </configuration>
+<!-- 
         <executions>
+
           <execution>
-            <id>unpack-bundle</id>
-            <phase>generate-resources</phase>
+            <id>test</id>
+            <phase>test</phase>
             <goals>
-              <goal>unpack-dependencies</goal>
+              <goal>test</goal>
             </goals>
             <configuration>
-              <includeArtifactIds>nexus-webapp</includeArtifactIds>
-              <outputDirectory>${bundle-expanded-dir}</outputDirectory>
-              <excludes>**/conf/plexus.properties</excludes>
+              <includes>
+                <include>org/apache/maven/mercury/all/it/AllTestCases.java</include>
+              </includes>
             </configuration>
           </execution>
-
         </executions>
+ -->
       </plugin>
+
+      <plugin>
+        <groupId>org.sonatype.maven.plugin</groupId>
+        <artifactId>emma4it-maven-plugin</artifactId>
+        <version>${emma4it.plugin.version}</version>
+      </plugin>
+      
+      
     </plugins>
   </build>
+
+  <reporting>
+    <plugins>
+
+      <plugin>
+        <groupId>org.sonatype.maven.plugin</groupId>
+        <artifactId>emma4it-maven-plugin</artifactId>
+        <version>${emma4it.plugin.version}</version>
+
+        <configuration>
+          <searchPath>${basedir}</searchPath>
+
+          <sourceFolders>
+            <sourceFolder>${basedir}/../mercury-artifact/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-crypto/mercury-crypto-api/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-crypto/mercury-crypto-basic/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-event/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-external/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-logging/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-md/mercury-md-shared/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-md/mercury-md-sat/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-plexus/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-api/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-cache-fs/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-flat/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-local-m2/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-local-map/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-remote-m2/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-repo/mercury-repo-virtual/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-transport/mercury-transport-api/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-transport/mercury-transport-http/src/main/java</sourceFolder>
+            <sourceFolder>${basedir}/../mercury-util/src/main/java</sourceFolder>
+          </sourceFolders>
+
+          <jarFiles>
+            <jarFile>${basedir}/../mercury-artifact/target/mercury-artifact-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-crypto/mercury-crypto-api/target/mercury-crypto-api-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-crypto/mercury-crypto-basic/target/mercury-crypto-basic-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-event/target/mercury-event-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-external/target/mercury-external-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-logging/target/mercury-logging-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-md/mercury-md-shared/target/mercury-md-shared-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-md/mercury-md-sat/target/mercury-md-sat-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-plexus/target/mercury-plexus-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-api/target/mercury-repo-api-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-cache-fs/target/mercury-repo-cache-fs-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-local-m2/target/mercury-repo-local-m2-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-local-map/target/mercury-repo-local-map-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-remote-m2/target/mercury-repo-remote-m2-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-repo/mercury-repo-remote-virtual/target/mercury-repo-remote-virtual-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-transport/mercury-transport-api/target/mercury-transport-api-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-transport/mercury-transport-http/target/mercury-transport-http-${project.version}.jar</jarFile>
+            <jarFile>${basedir}/../mercury-util/target/mercury-util-${project.version}.jar</jarFile>
+          </jarFiles>
+        </configuration>
+
+      </plugin>
+
+    </plugins>
+  </reporting>
+
+  
 </project>
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 8ca9ed0..5b4af9c 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,18 @@
 
 package org.apache.maven.mercury.all.it;
 
+import org.apache.maven.mercury.dependency.tests.DependencyTreeBuilderTest;
+import org.apache.maven.mercury.plexus.DefaultPlexusMercuryTest;
+import org.apache.maven.mercury.repository.tests.ComprehensiveRepositoryTest;
+import org.apache.maven.mercury.repository.tests.DavServerTest;
+import org.apache.maven.mercury.repository.tests.LocalRepositoryReaderM2Test;
+import org.apache.maven.mercury.repository.tests.LocalRepositoryWriterM2Test;
+import org.apache.maven.mercury.repository.tests.ReadWriteTest;
+import org.apache.maven.mercury.repository.tests.RemoteRepositoryCachingReaderM2Test;
+import org.apache.maven.mercury.repository.tests.RemoteRepositoryReaderM2Test;
+import org.apache.maven.mercury.repository.tests.RemoteRepositoryWriterM2Test;
+import org.apache.maven.mercury.repository.tests.VirtualRepositoryReaderIntegratedTest;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
@@ -58,7 +70,7 @@
         /*
          * This must be the first one to ensure the local repository is properly setup.
          */
-//        suite.addTestSuite( MercuryITBootstrapTest.class );
+        suite.addTestSuite( DavServerTest.class );
 
         /*
          * Add tests in reverse alpha order by number below. This makes testing new
@@ -66,6 +78,16 @@
          * the tests are to finishing. Newer tests are also more likely to fail, so this is
          * a fail fast technique as well.
          */
+        suite.addTestSuite( LocalRepositoryReaderM2Test.class );
+        suite.addTestSuite( LocalRepositoryWriterM2Test.class );
+        suite.addTestSuite( ReadWriteTest.class );
+        suite.addTestSuite( RemoteRepositoryCachingReaderM2Test.class );
+        suite.addTestSuite( RemoteRepositoryReaderM2Test.class );
+        suite.addTestSuite( RemoteRepositoryWriterM2Test.class );
+        suite.addTestSuite( DependencyTreeBuilderTest.class );
+        suite.addTestSuite( VirtualRepositoryReaderIntegratedTest.class );
+        suite.addTestSuite( DefaultPlexusMercuryTest.class );
+        suite.addTestSuite( ComprehensiveRepositoryTest.class );
 
 
         /*
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 5fe5414..44874d5 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
@@ -25,13 +25,16 @@
 import java.util.HashSet;
 import java.util.List;
 
+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;
 import org.apache.maven.mercury.artifact.ArtifactQueryList;
 import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
 import org.apache.maven.mercury.crypto.sha.SHA1VerifierFactory;
@@ -45,6 +48,7 @@
 import org.apache.maven.mercury.util.FileUtil;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 
 /**
  * 
@@ -100,7 +104,7 @@
   throws Exception
   {
     super.setUp();
-    
+
     // prep. Artifact
     File artifactBinary = File.createTempFile( "test-repo-writer", "bin" );
     FileUtil.writeRawData( getClass().getResourceAsStream( "/maven-core-2.0.9.jar" ), artifactBinary );
@@ -134,8 +138,10 @@
     localRepoDir = new File( "./target/local" );
     FileUtil.delete( localRepoDir );
     localRepoDir.mkdirs();
+//    
+//    localRepo = new LocalRepositoryM2( "testLocalRepo", localRepoDir, pm.findDependencyProcessor() );
     
-    localRepo = new LocalRepositoryM2( "testLocalRepo", localRepoDir, pm.findDependencyProcessor() );
+    localRepo = pm.constructLocalRepositoryM2( "testLocal", localRepoDir, null, null, null, null );
     
     repos = new ArrayList<Repository>();
     repos.add( localRepo );
@@ -174,9 +180,28 @@
     return false;
   }
   //-------------------------------------------------------------------------------------
-  public void testDummy()
+  public void testFindDepProcessorWithHint()
+  throws RepositoryException, ComponentLookupException
   {
-    System.out.println("Have to disable plexus tests - need to fix maven-mercury first");
+      DependencyProcessor dp = null;
+
+      dp = pm.findDependencyProcessor("default");
+      
+      assertNotNull( dp );
+      
+      assertTrue( MavenDependencyProcessor.class.isAssignableFrom( dp.getClass() ) );
+  }
+  //-------------------------------------------------------------------------------------
+  public void testFindDepProcessor() // should run after the previous one
+  throws RepositoryException, ComponentLookupException
+  {
+      DependencyProcessor dp = null;
+      
+      dp = pm.findDependencyProcessor();
+      
+      assertNotNull( dp );
+      
+      assertTrue( MavenDependencyProcessor.class.isAssignableFrom( dp.getClass() ) );
   }
   //-------------------------------------------------------------------------------------
   public void testWrite()
@@ -189,6 +214,31 @@
     assertTrue( af.exists() );
   }
   //-------------------------------------------------------------------------------------
+  public void testReadVersions()
+  throws RepositoryException
+  {
+    ArtifactMetadata bmd = new ArtifactMetadata(artifactCoord);
+    
+    List<ArtifactBasicMetadata> res = pm.readVersions( repos, bmd );
+    
+    assertNotNull( res );
+    
+    assertFalse( res.isEmpty() );
+    
+    ArtifactBasicMetadata a = res.get( 0 );
+    
+    assertEquals( "1.0.0-alpha-2-20081104.001322-2", a.getVersion() );
+    
+    List<Artifact> al = pm.read( repos, a );
+    
+    assertNotNull( al );
+    
+    assertFalse( al.isEmpty() );
+    
+    assertEquals( 1, al.size() );
+    
+  }
+  //-------------------------------------------------------------------------------------
   public void testRead()
   throws RepositoryException
   {
@@ -272,13 +322,13 @@
   }
   //-------------------------------------------------------------------------------------
   @SuppressWarnings("unchecked")
-  public void ntestResolveWithExclusion()
+  public void testResolveWithExclusion()
   throws Exception
   {
-    Server central = new Server( "central", new URL("http://repo1.maven.org/maven2") );
+//    Server central = new Server( "central", new URL("http://repo1.maven.org/maven2") );
 //    Server central = new Server( "central", new URL("http://repository.sonatype.org/content/groups/public") );
     
-    repos.add( new RemoteRepositoryM2(central, pm.findDependencyProcessor()) );
+//    repos.add( new RemoteRepositoryM2(central, pm.findDependencyProcessor()) );
 
     String artifactId = "asm:asm-xml:3.0";
 
@@ -299,5 +349,33 @@
     assertFalse( assertHasArtifact( res, "asm:asm:3.0" ) );
   }
   //-------------------------------------------------------------------------------------
+  @SuppressWarnings("unchecked")
+  public void testResolveWithInclusion()
+  throws Exception
+  {
+//    Server central = new Server( "central", new URL("http://repo1.maven.org/maven2") );
+//    Server central = new Server( "central", new URL("http://repository.sonatype.org/content/groups/public") );
+    
+//    repos.add( new RemoteRepositoryM2(central, pm.findDependencyProcessor()) );
+
+    String artifactId = "asm:asm-xml:3.0";
+
+    List<ArtifactMetadata> res = pm.resolve( repos
+                                            , ArtifactScopeEnum.compile
+                                            , new ArtifactQueryList(artifactId)
+                                            , new ArtifactInclusionList("asm:asm-xml:3.0","asm:asm-util:3.0")
+                                            , null
+                                           );
+    
+    System.out.println("Resolved as "+res);
+
+    assertEquals( 2, res.size() );
+    
+    assertTrue( assertHasArtifact( res, "asm:asm-xml:3.0" ) );
+    assertTrue( assertHasArtifact( res, "asm:asm-util:3.0" ) );
+    assertFalse( assertHasArtifact( res, "asm:asm-tree:3.0" ) );
+    assertFalse( assertHasArtifact( res, "asm:asm:3.0" ) );
+  }
+  //-------------------------------------------------------------------------------------
   //-------------------------------------------------------------------------------------
 }
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 81cc3ad..aebac29 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
@@ -20,6 +20,7 @@
 package org.apache.maven.mercury.repository.tests;
 
 import java.io.File;
+import java.io.FilenameFilter;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
@@ -77,6 +78,8 @@
     List<Repository> _lrs;
     List<Repository> _repos;
     
+    private static final boolean isWindows = File.pathSeparatorChar == ';';
+    
     
     @Override
     protected void setUp()
@@ -84,23 +87,32 @@
     {
         super.setUp();
         
+        String prefix = "-t-";
+        String suffix = "-t";
+        File temp = File.createTempFile( prefix, suffix );
+        
         DependencyProcessor dp = new MavenDependencyProcessor();
         Credentials user = new Credentials("foo","bar");
         
-        _base1 = new File( "./target/webdav1" );
-        FileUtil.delete( _base1 );
+        _base1 = new File( "./target/webdav1" + temp.getName() );
+//        FileUtil.delete( _base1 );
+        assertFalse( _base1.exists() );
         _base1.mkdirs();
-        _server1 = new WebDavServer( 0, _base1, _context1, getContainer(), 9, "mercury-test-1" );
+        _base1.deleteOnExit();
+        _server1 = new WebDavServer( 0, _base1, _context1, getContainer(), 9, null, _base1.getCanonicalPath() );
         _server1.start();
         _port1 = _server1.getPort();
         
         Server server = new Server("rr1", new URL("http://localhost:"+_port1+_context1), false, false, user );
         _rr1 = new RemoteRepositoryM2( server, dp );
         
-        _base2 = new File( "./target/webdav2" );
-        FileUtil.delete( _base2 );
+        temp = File.createTempFile( prefix, suffix );
+        _base2 = new File( "./target/webdav2" + temp.getName() );
+//        FileUtil.delete( _base2 );
+        assertFalse( _base2.exists() );
         _base2.mkdirs();
-        _server2 = new WebDavServer( 0, _base2, _context2, getContainer(), 9, "mercury-test-2" );
+        _base2.deleteOnExit();
+        _server2 = new WebDavServer( 0, _base2, _context2, getContainer(), 9, null, _base2.getCanonicalPath() );
         _server2.start();
         _port2 = _server2.getPort();
         
@@ -111,14 +123,20 @@
         _rrs.add( _rr1 );
         _rrs.add( _rr2 );
         
-        _lbase1 = new File( _local1 );
-        FileUtil.delete( _lbase1 );
-        _lbase1.mkdirs();
+        temp = File.createTempFile( prefix, suffix );
+        _lbase1 = new File( _local1 + temp.getName() );
+//        FileUtil.delete( _lbase1 );
+        assertFalse( _lbase1.exists() );
+        _lbase1.mkdirs() ;
+        _lbase1.deleteOnExit();
         _lr1 = new LocalRepositoryM2( "lr1", _lbase1, dp );
         
-        _lbase2 = new File( _local2 );
-        FileUtil.delete( _lbase2 );
+        temp = File.createTempFile( prefix, suffix );
+        _lbase2 = new File( _local2 + temp.getName() );
+//        FileUtil.delete( _lbase2 );
+        assertFalse( _lbase2.exists() );
         _lbase2.mkdirs();
+        _lbase2.deleteOnExit();
         _lr2 = new LocalRepositoryM2( "lr2", _lbase2, dp );
         
         _lrs = new ArrayList<Repository>(2);
@@ -153,9 +171,30 @@
             }
             catch( Exception e ) {}
             finally { _server2 = null; }
+            
+       File target = new File( "target" );
+       File [] files = target.listFiles(
+                           new FilenameFilter()
+                           {
+
+                            public boolean accept( File dir, String name )
+                            {
+                                if( name.startsWith( "webdav" ))
+                                    return true;
+                                return false;
+                            }
+                               
+                           }
+                                       );
+       
+       for( File f : files )
+       {
+           FileUtil.delete( f );
+           System.out.println("dropping "+f.getAbsolutePath() );
+       }
     }
     
-    public void writeArtifact( String name, File af, File ap, Repository repo )
+    public void writeArtifact( String name, File af, File ap, Repository repo, File expectedFile )
     throws Exception
     {
         DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata(name) );
@@ -166,6 +205,18 @@
         al.add( da );
         
         repo.getWriter().writeArtifacts( al );
+        
+        int count = 10;
+        
+        if( expectedFile != null )
+        {
+            while( ! expectedFile.exists() && count > 0 )
+            {
+//                if( isWindows )
+                    Thread.sleep( 1000L );
+                    count--;
+            }
+        }
     }
     
     public List<Artifact> readArtifact( String name , List<Repository> repos )
@@ -226,7 +277,7 @@
         assertFalse( aJar1.exists() );
         assertFalse( aJar2.exists() );
         
-        writeArtifact( name, af, ap, _rr2 );
+        writeArtifact( name, af, ap, _rr2, aJar2 );
         
         assertFalse( aJar1.exists() );
         assertTrue( aJar2.exists() );
@@ -261,7 +312,7 @@
         assertFalse( aJar1.exists() );
         assertFalse( aJar2.exists() );
         
-        writeArtifact( name, af, ap, _rr2 );
+        writeArtifact( name, af, ap, _rr2, aJar2 );
         
         assertFalse( aJar1.exists() );
         assertTrue( aJar2.exists() );
@@ -297,7 +348,7 @@
         assertFalse( aJar1.exists() );
         assertFalse( aJar2.exists() );
         
-        writeArtifact( name, af, ap, _lr2 );
+        writeArtifact( name, af, ap, _lr2, aJar2 );
         
         assertFalse( aJar1.exists() );
         assertTrue( aJar2.exists() );
@@ -327,7 +378,7 @@
         assertFalse( aJar1.exists() );
         assertFalse( aJar2.exists() );
         
-        writeArtifact( name, af, ap, _rr2 );
+        writeArtifact( name, af, ap, _rr2, aJar2 );
         
         assertFalse( aJar1.exists() );
         assertTrue( aJar2.exists() );
@@ -348,6 +399,31 @@
         assertFalse( localRepo2Jar.exists() );
     }
     
+    public void testWriteReadSnapshotLocal()
+    throws Exception
+    {
+        String name = "org.apache.maven:maven-core:2.0.9-SNAPSHOT";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar1 = new File( _lbase1, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-SNAPSHOT.jar");
+        File aJar2 = new File( _lbase2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-SNAPSHOT.jar");
+        
+        assertFalse( aJar1.exists() );
+        assertFalse( aJar2.exists() );
+        
+        writeArtifact( name, af, ap, _lr2, aJar2 );
+        
+        assertFalse( aJar1.exists() );
+        assertTrue( aJar2.exists() );
+        
+        List<Artifact> al = readArtifact( name, _lrs );
+
+        assertTrue( aJar1.exists() );
+        assertTrue( aJar2.exists() );
+    }
+    
     public void testWriteTimestampReadSnapshotSingleRepo()
     throws Exception
     {
@@ -358,8 +434,44 @@
         File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
         File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
         
-        writeArtifact( nameTS1, af, ap, _rr2 );
-        writeArtifact( nameTS2, af, ap, _rr1 );
+        File aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        
+        writeArtifact( nameTS1, af, ap, _rr2, aJar );
+        
+        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<Artifact> al = readArtifact( nameSN, _rrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-20090204.232324-24", aSN.getVersion() );
+    }
+    
+    public void testWriteTimestampReadSnapshotSingleRepoSN()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameSN = "org.apache.maven:maven-core:2.0.9-SNAPSHOT";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _rr2, aJar );
+        writeArtifact( nameTS2, af, ap, _rr2, null );
+        writeArtifact( nameSN, af, ap, _rr2, null );
         
         List<ArtifactBasicMetadata> vl = readVersions( nameSN, _rrs );
         
@@ -382,5 +494,237 @@
         assertNotNull( aSN.getFile() );
         
         assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-SNAPSHOT", aSN.getVersion() );
+    }
+    
+    public void testWriteTimestampReadSnapshot2Repos()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameSN = "org.apache.maven:maven-core:2.0.9-SNAPSHOT";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _rr2, aJar );
+
+        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 );
+        
+        System.out.println(vl);
+        
+        assertNotNull( vl );
+        
+        assertEquals( 1, vl.size() );
+        
+        List<Artifact> al = readArtifact( nameSN, _rrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-20090204.232324-24", aSN.getVersion() );
+    }
+    
+    public void testWriteTimestampReadSnapshot2ReposReversed()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameSN = "org.apache.maven:maven-core:2.0.9-SNAPSHOT";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _base1, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _rr1, aJar );
+
+        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 );
+        
+        System.out.println(vl);
+        
+        assertNotNull( vl );
+        
+        assertEquals( 1, vl.size() );
+        
+        List<Artifact> al = readArtifact( nameSN, _rrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-20090204.232324-24", aSN.getVersion() );
+    }
+    
+    public void testLatest()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameRL = "org.apache.maven:maven-core:2.0.8";
+        String nameLT = "org.apache.maven:maven-core:LATEST";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _rr2, aJar );
+        
+        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 );
+        
+        aJar = new File( _base2, "org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.jar");
+        writeArtifact( nameRL,  af, ap, _rr2, aJar );
+        
+        List<Artifact> al = readArtifact( nameLT, _rrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-20090204.232324-24", aSN.getVersion() );
+    }
+    
+    public void testLatestLocal()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameRL = "org.apache.maven:maven-core:2.0.8";
+        String nameLT = "org.apache.maven:maven-core:LATEST";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _lbase2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _lr2, aJar );
+        
+        aJar = new File( _lbase1, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232324-24.jar");
+        writeArtifact( nameTS2, af, ap, _lr1, aJar );
+        
+        aJar = new File( _lbase2, "org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.jar");
+        writeArtifact( nameRL, af, ap, _lr2, aJar );
+        
+        List<Artifact> al = readArtifact( nameLT, _lrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.9-20090204.232324-24", aSN.getVersion() );
+    }
+    
+    public void testRelease()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameRL = "org.apache.maven:maven-core:2.0.8";
+        String name = "org.apache.maven:maven-core:RELEASE";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _base2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _rr2, aJar );
+        
+        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 );
+        
+        aJar = new File( _base2, "org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.jar");
+        writeArtifact( nameRL, af, ap, _rr2, aJar );
+        
+        List<Artifact> al = readArtifact( name, _rrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.8", aSN.getVersion() );
+    }
+    
+    public void testReleaseLocal()
+    throws Exception
+    {
+        String nameTS1 = "org.apache.maven:maven-core:2.0.9-20090204.232323-23";
+        String nameTS2 = "org.apache.maven:maven-core:2.0.9-20090204.232324-24";
+        String nameRL = "org.apache.maven:maven-core:2.0.8";
+        String name = "org.apache.maven:maven-core:RELEASE";
+        
+        File af = new File( _resourceBase, "maven-core-2.0.9.jar" );
+        File ap = new File( _resourceBase, "maven-core-2.0.9.pom" );
+        
+        File aJar = new File( _lbase2, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232323-23.jar");
+        writeArtifact( nameTS1, af, ap, _lr2, aJar );
+        
+        aJar = new File( _lbase1, "org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20090204.232324-24.jar");
+        writeArtifact( nameTS2, af, ap, _lr1, aJar );
+        
+        aJar = new File( _lbase2, "org/apache/maven/maven-core/2.0.8/maven-core-2.0.8.jar");
+        writeArtifact( nameRL, af, ap, _lr2, aJar );
+
+        List<Artifact> al = readArtifact( name, _lrs );
+        
+        System.out.println(al);
+        
+        assertNotNull( al );
+        
+        assertEquals( 1, al.size() );
+        
+        Artifact aSN = al.get( 0 );
+        
+        assertNotNull( aSN.getFile() );
+        
+        assertTrue( aSN.getFile().exists() );
+        
+        assertEquals( "2.0.8", aSN.getVersion() );
     }
 }
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 0ecb4ac..c195665 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
@@ -47,31 +47,49 @@
 public class DavServerTest
 extends PlexusTestCase
 {
-    static final String _davContext = "/webdav";
-    
     static final String _user = "foo";
     
     static final String _pass = "bar";
     
+    // repo1
     WebDavServer _dav;
     
     File _base;
     
     RemoteRepositoryM2 _davRepo;
+    
+    // repo2
+    WebDavServer _dav2;
+    
+    File _base2;
+    
+    RemoteRepositoryM2 _davRepo2;
 
+    static final String _davContext = "/webdav";
+    
+    static final String _davContext2 = "/webdav2test";
+    
     //---------------------------------------------------------------------------------------------
     protected void setUp()
     throws Exception
     {
         super.setUp();
         
+        setUp1();
+        
+        setUp2();
+    }
+    //---------------------------------------------------------------------------------------------
+    protected void setUp1()
+    throws Exception
+    {
         _base = new File( "./target", _davContext );
         
         FileUtil.delete( _base );
         
         _base.mkdirs();
         
-        _dav = new WebDavServer( 0, _base, _davContext, getContainer(), 9, "mercury-test" );
+        _dav = new WebDavServer( 0, _base, _davContext, getContainer(), 9, "mercury-test", null );
         
         _dav.start();
         
@@ -84,6 +102,28 @@
         _davRepo = new RemoteRepositoryM2( server, new MavenDependencyProcessor() );
     }
     //---------------------------------------------------------------------------------------------
+    protected void setUp2()
+    throws Exception
+    {
+        _base2 = new File( "./target", _davContext2 );
+        
+        FileUtil.delete( _base2 );
+        
+        _base2.mkdirs();
+        
+        _dav2 = new WebDavServer( 0, _base2, _davContext2, getContainer(), 9, null, _base2.getAbsolutePath() );
+        
+        _dav2.start();
+        
+        Credentials user = new Credentials(_user,_pass);
+        
+        Server server = new Server("dav2", new URL("http://localhost:"+_dav2.getPort()+_davContext2), false, false, user );
+        
+        System.out.println("URL: "+server.getURL() );
+        
+        _davRepo2 = new RemoteRepositoryM2( server, new MavenDependencyProcessor() );
+    }
+    //---------------------------------------------------------------------------------------------
     protected void tearDown()
     throws Exception
     {
@@ -95,6 +135,13 @@
             _dav.destroy();
             _dav = null;
         }  
+        
+        if( _dav2 != null )
+        {
+            _dav2.stop();
+            _dav2.destroy();
+            _dav2 = null;
+        }  
     }
     //---------------------------------------------------------------------------------------------
     public void testDavWrite()
@@ -162,4 +209,69 @@
         assertEquals( "test-pom".length(), a.getFile().length() );
     }
     //---------------------------------------------------------------------------------------------
+    public void testDavWrite2()
+    throws Exception
+    {
+        File jar = new File("./target/test.jar");
+        FileUtil.writeRawData( jar, "test-jar" );
+
+        File pom = new File("./target/test.pom");
+        FileUtil.writeRawData( pom, "test-pom" );
+
+        DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("a:test:1.0") );
+        da.setFile( jar );
+        da.setPomBlob( FileUtil.readRawData( pom ) );
+
+        List<Artifact> al = new ArrayList<Artifact>( 8 );
+        al.add( da );
+
+        RepositoryWriter rw = _davRepo2.getWriter();
+
+        rw.writeArtifacts( al );
+
+        File davJar = new File( _base2, "a/test/1.0/test-1.0.jar" );
+
+        assertTrue( davJar.exists() );
+        
+        assertEquals( jar.length(), davJar.length() );
+    }
+    //---------------------------------------------------------------------------------------------
+    public void testDavRead2()
+    throws Exception
+    {
+        testDavWrite2();
+        
+        ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("a:test:1.0");
+        
+        List<ArtifactBasicMetadata> query = new ArrayList<ArtifactBasicMetadata>( 1 );
+
+        query.add( bmd );
+        
+        RepositoryReader rr = _davRepo2.getReader();
+        
+        ArtifactResults res = rr.readArtifacts( query );
+        
+        assertNotNull( res );
+        
+        assertFalse( res.hasExceptions() );
+        
+        assertTrue( res.hasResults() );
+        
+        List<Artifact> al = res.getResults( bmd );
+        
+        assertNotNull( al );
+        
+        assertFalse( al.isEmpty() );
+        
+        Artifact a = al.get( 0 );
+
+        assertNotNull( a );
+
+        assertNotNull( a.getFile() );
+
+        assertTrue( a.getFile().exists() );
+
+        assertEquals( "test-pom".length(), a.getFile().length() );
+    }
+    //---------------------------------------------------------------------------------------------
 }
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 a9418de..57e87e9 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
@@ -79,7 +79,7 @@
 
       targetDirectory.mkdirs();
       
-      _dav = new WebDavServer( 0, targetDirectory, _davContext, getContainer(), 9, baseHint );
+      _dav = new WebDavServer( 0, targetDirectory, _davContext, getContainer(), 9, baseHint, null );
       
       _dav.start();
       
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 f5ee5e8..5b0de6e 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
@@ -51,6 +51,7 @@
                          , PlexusContainer container
                          , int debugLevel
                          , String fileCollectionHint
+                         , String fileCollectionBase
                          )
     throws Exception
     {
@@ -81,7 +82,17 @@
         context.setAttribute( PlexusConstants.PLEXUS_KEY, container );
         context.setResourceBase( base.getCanonicalPath() );
         
-        context.setAttribute( "resourceCollectionHint", fileCollectionHint );
+        if( fileCollectionBase != null )
+        {
+            context.setAttribute( "resourceCollectionBase", fileCollectionBase );
+            System.out.println("webDav resource base: "+fileCollectionBase);
+        }
+        else
+        {
+            context.setAttribute( "resourceCollectionHint", fileCollectionHint );
+            System.out.println("webDav resource hint: "+fileCollectionHint);
+        }
+
         context.setAttribute( "debug", debugLevel+"" );
 
 //        Map<String,String> initParams = new HashMap<String, String>(8);
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom b/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom
new file mode 100644
index 0000000..18fd6ee
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom
@@ -0,0 +1,91 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>asm-parent</artifactId>
+  <groupId>asm</groupId>
+  <version>3.0</version>
+  <packaging>pom</packaging>
+
+  <name>ASM</name>
+  <description>A very small and fast Java bytecode manipulation framework</description>
+  <url>http://asm.objectweb.org/</url>
+  
+  <organization>
+    <name>ObjectWeb</name>
+    <url>http://www.objectweb.org/</url>
+  </organization>
+  <inceptionYear>2000</inceptionYear>
+
+  <developers>
+    <developer>
+      <name>Eric Bruneton</name>
+      <id>ebruneton</id>
+      <email>Eric.Bruneton@rd.francetelecom.com</email>
+      <roles>
+        <role>Creator</role>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+    <developer>
+      <name>Eugene Kuleshov</name>
+      <id>eu</id>
+      <email>eu@javatx.org</email>
+      <roles>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <scm>
+    <connection>scm:cvs:pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/asm:asm</connection>
+    <developerConnection>scm:cvs:ext:${maven.username}@cvs.forge.objectweb.org:/cvsroot/asm:asm</developerConnection>
+    <url>http://cvs.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/asm/</url>
+  </scm>
+  
+  <issueManagement>
+    <url>http://forge.objectweb.org/tracker/?group_id=23</url>
+  </issueManagement>
+
+  <dependencyManagement>
+    <dependencies>
+
+      <dependency>
+        <artifactId>asm</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+        <artifactId>asm-tree</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+        <artifactId>asm-analysis</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+        <artifactId>asm-commons</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+        <artifactId>asm-util</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+        <artifactId>asm-xml</artifactId>
+        <groupId>${project.groupId}</groupId>
+        <version>${project.version}</version>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+</project>
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom.sha1
new file mode 100644
index 0000000..d7a8a9a
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-parent/3.0/asm-parent-3.0.pom.sha1
@@ -0,0 +1 @@
+526bfebc865ac047ff3fa7d77924a4edff7ba468
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar
new file mode 100644
index 0000000..2a4b208
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar
Binary files differ
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar.sha1
new file mode 100644
index 0000000..5803091
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.jar.sha1
@@ -0,0 +1 @@
+6fff655717d1e1871decfe9f8e46a531e8df3a31
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom
new file mode 100644
index 0000000..dcadce5
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom
@@ -0,0 +1,20 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>asm-parent</artifactId>
+    <groupId>asm</groupId>
+    <version>3.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asm-tree</artifactId>
+  <name>ASM Tree</name>
+  <version>3.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>asm</groupId>
+      <artifactId>asm</artifactId>
+    </dependency>
+  </dependencies>
+  <distributionManagement>
+    <status>deployed</status>
+  </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom.sha1
new file mode 100644
index 0000000..9da1941
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-tree/3.0/asm-tree-3.0.pom.sha1
@@ -0,0 +1 @@
+ab6cd3767b9d74674add377f571dc6fb28c867f9
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar
new file mode 100644
index 0000000..5133856
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar
Binary files differ
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar.sha1
new file mode 100644
index 0000000..065cb38
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.jar.sha1
@@ -0,0 +1 @@
+948516ecc11fe78bc373aa68626d64bc51321a26
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom
new file mode 100644
index 0000000..9996c1c
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom
@@ -0,0 +1,20 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>asm-parent</artifactId>
+    <groupId>asm</groupId>
+    <version>3.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asm-util</artifactId>
+  <name>ASM Util</name>
+  <version>3.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>asm</groupId>
+      <artifactId>asm-tree</artifactId>
+    </dependency>
+  </dependencies>
+  <distributionManagement>
+    <status>deployed</status>
+  </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom.sha1
new file mode 100644
index 0000000..a4c102f
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-util/3.0/asm-util-3.0.pom.sha1
@@ -0,0 +1 @@
+93889a96e9d131986748858c5530c36990f4efff
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar
new file mode 100644
index 0000000..cd55000
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar
Binary files differ
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar.sha1
new file mode 100644
index 0000000..9c7479e
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.jar.sha1
@@ -0,0 +1 @@
+f37fac6e8563334d0d6960fec5c5cdaf65c69b6f
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom
new file mode 100644
index 0000000..83f0060
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom
@@ -0,0 +1,20 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>asm-parent</artifactId>
+    <groupId>asm</groupId>
+    <version>3.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asm-xml</artifactId>
+  <name>ASM XML</name>
+  <version>3.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>asm</groupId>
+      <artifactId>asm-util</artifactId>
+    </dependency>
+  </dependencies>
+  <distributionManagement>
+    <status>deployed</status>
+  </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom.sha1
new file mode 100644
index 0000000..fac9bea
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm-xml/3.0/asm-xml-3.0.pom.sha1
@@ -0,0 +1 @@
+e4f53862352dcbeab566b761283dd94c30326943
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar
new file mode 100644
index 0000000..112f5bd
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar
Binary files differ
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar.sha1
new file mode 100644
index 0000000..276f2b7
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.jar.sha1
@@ -0,0 +1 @@
+d1616c03f056291a2314510dea75739b15b4d415
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom
new file mode 100644
index 0000000..aedbcee
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom
@@ -0,0 +1,14 @@
+<?xml version="1.0"?><project>
+  <parent>
+    <artifactId>asm-parent</artifactId>
+    <groupId>asm</groupId>
+    <version>3.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asm</artifactId>
+  <name>ASM Core</name>
+  <version>3.0</version>
+  <distributionManagement>
+    <status>deployed</status>
+  </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom.sha1 b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom.sha1
new file mode 100644
index 0000000..ef21b66
--- /dev/null
+++ b/mercury-it/src/test/resources/remoteRepo/asm/asm/3.0/asm-3.0.pom.sha1
@@ -0,0 +1 @@
+b48a64347352256722f848007cfe92939ec04747
\ No newline at end of file
diff --git a/mercury-logging/pom.xml b/mercury-logging/pom.xml
index cf896e5..9b8269b 100644
--- a/mercury-logging/pom.xml
+++ b/mercury-logging/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-logging</artifactId>
 
diff --git a/mercury-maven/list-.txt b/mercury-maven/list-.txt
index fe4fec6..7571f5f 100644
--- a/mercury-maven/list-.txt
+++ b/mercury-maven/list-.txt
@@ -1,29 +1,8 @@
 asm:asm-xml:3.0
 org.apache.maven.plugins:maven-antrun-plugin:1.2
-org.apache.maven.plugins:maven-archetypeng-plugin:2.0
 org.apache.maven.plugins:maven-assembly-plugin:2.1
 org.apache.maven.plugins:maven-changelog-plugin:2.1
 org.apache.maven.plugins:maven-checkstyle-plugin:2.1
 org.apache.maven.plugins:maven-clean-plugin:2.2
 org.apache.maven.plugins:maven-compiler-plugin:2.0.2
-org.apache.maven.plugins:maven-dependency-plugin:2.0
-org.apache.maven.plugins:maven-deploy-plugin:2.4
-org.apache.maven.plugins:maven-ear-plugin:2.3.1
-org.apache.maven.plugins:maven-eclipse-plugin:2.4
-org.apache.maven.plugins:maven-ejb-plugin:2.1
-org.apache.maven.plugins:maven-help-plugin:2.0.2
-org.apache.maven.plugins:maven-install-plugin:2.2
-org.apache.maven.plugins:maven-jar-plugin:2.2
-org.apache.maven.plugins:maven-javadoc-plugin:2.4
-org.apache.maven.plugins:maven-jxr-plugin:2.1
-org.apache.maven.plugins:maven-plugin-parent:2.0.1
-org.apache.maven.plugins:maven-plugin-plugin:2.4.3
-org.apache.maven.plugins:maven-pmd-plugin:2.4
-org.apache.maven.plugins:maven-project-info-reports-plugin:2.0.1
-org.apache.maven.plugins:maven-rar-plugin:2.2
-org.apache.maven.plugins:maven-remote-resources-plugin:1.0
-org.apache.maven.plugins:maven-resources-plugin:2.3
-org.apache.maven.plugins:maven-shade-plugin:1.1
-org.apache.maven.plugins:maven-source-plugin:2.0.4
-org.apache.maven.plugins:maven-surefire-plugin:2.4.3
 org.apache.maven.plugins:maven-surefire-report-plugin:2.4.3
diff --git a/mercury-maven/list-plugins.txt b/mercury-maven/list-plugins.txt
new file mode 100644
index 0000000..fe4fec6
--- /dev/null
+++ b/mercury-maven/list-plugins.txt
@@ -0,0 +1,29 @@
+asm:asm-xml:3.0
+org.apache.maven.plugins:maven-antrun-plugin:1.2
+org.apache.maven.plugins:maven-archetypeng-plugin:2.0
+org.apache.maven.plugins:maven-assembly-plugin:2.1
+org.apache.maven.plugins:maven-changelog-plugin:2.1
+org.apache.maven.plugins:maven-checkstyle-plugin:2.1
+org.apache.maven.plugins:maven-clean-plugin:2.2
+org.apache.maven.plugins:maven-compiler-plugin:2.0.2
+org.apache.maven.plugins:maven-dependency-plugin:2.0
+org.apache.maven.plugins:maven-deploy-plugin:2.4
+org.apache.maven.plugins:maven-ear-plugin:2.3.1
+org.apache.maven.plugins:maven-eclipse-plugin:2.4
+org.apache.maven.plugins:maven-ejb-plugin:2.1
+org.apache.maven.plugins:maven-help-plugin:2.0.2
+org.apache.maven.plugins:maven-install-plugin:2.2
+org.apache.maven.plugins:maven-jar-plugin:2.2
+org.apache.maven.plugins:maven-javadoc-plugin:2.4
+org.apache.maven.plugins:maven-jxr-plugin:2.1
+org.apache.maven.plugins:maven-plugin-parent:2.0.1
+org.apache.maven.plugins:maven-plugin-plugin:2.4.3
+org.apache.maven.plugins:maven-pmd-plugin:2.4
+org.apache.maven.plugins:maven-project-info-reports-plugin:2.0.1
+org.apache.maven.plugins:maven-rar-plugin:2.2
+org.apache.maven.plugins:maven-remote-resources-plugin:1.0
+org.apache.maven.plugins:maven-resources-plugin:2.3
+org.apache.maven.plugins:maven-shade-plugin:1.1
+org.apache.maven.plugins:maven-source-plugin:2.0.4
+org.apache.maven.plugins:maven-surefire-plugin:2.4.3
+org.apache.maven.plugins:maven-surefire-report-plugin:2.4.3
diff --git a/mercury-maven/mercury-compare-maven-plugin/c b/mercury-maven/mercury-compare-maven-plugin/c
index 92c6e60..c1a15fd 100755
--- a/mercury-maven/mercury-compare-maven-plugin/c
+++ b/mercury-maven/mercury-compare-maven-plugin/c
@@ -1 +1,2 @@
-mvn -e -s s.xml org.sonatype.maven.plugins:mercury-compare-maven-plugin:1.0:deps -DtargetDir=../deps -DlistFile=../list.txt -DlocalRepo=../localRepoMaven
+mvn -e -s s.xml org.sonatype.maven.plugins:mercury-compare-maven-plugin:1.0-alpha-5-SNAPSHOT:deps -DtargetDir=../deps -DlistFile=../list.txt -DlocalRepo=../localRepoMaven
+#mvn -e -s s.xml org.sonatype.maven.plugins:mercury-compare-maven-plugin:1.0-alpha-5-SNAPSHOT:deps -DtargetDir=../deps -DlistFile=../list.txt -DlocalRepo=/app/maven.repo
diff --git a/mercury-maven/mercury-compare-maven-plugin/pom.xml b/mercury-maven/mercury-compare-maven-plugin/pom.xml
index a0458a0..ddd4657 100644
--- a/mercury-maven/mercury-compare-maven-plugin/pom.xml
+++ b/mercury-maven/mercury-compare-maven-plugin/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0.0-alpha-3-SNAPSHOT</version>
+    <version>1.0-alpha-5-SNAPSHOT</version>
   </parent>
   
   <groupId>org.sonatype.maven.plugins</groupId>
diff --git a/mercury-maven/mercury-compare-maven-plugin/s.xml b/mercury-maven/mercury-compare-maven-plugin/s.xml
index 1ec3b8e..505ad4c 100644
--- a/mercury-maven/mercury-compare-maven-plugin/s.xml
+++ b/mercury-maven/mercury-compare-maven-plugin/s.xml
@@ -22,7 +22,12 @@
 
 <settings>
 
+<!--
   <localRepository>/app/src/asf/maven/mercury/trunk/mercury-maven/localRepoMaven</localRepository>
+  <localRepository>/app/maven.repo</localRepository>
+-->
+  <localRepository>/app/src/asf/maven/mercury/trunk/mercury-maven/localRepoMaven</localRepository>
+
 
 <profiles>
 
diff --git a/mercury-maven/mercury-compare-mdo/pom.xml b/mercury-maven/mercury-compare-mdo/pom.xml
index 24c7da0..80117aa 100644
--- a/mercury-maven/mercury-compare-mdo/pom.xml
+++ b/mercury-maven/mercury-compare-mdo/pom.xml
@@ -23,7 +23,7 @@
   <parent>
   	<groupId>org.apache.maven.mercury</groupId>
   	<artifactId>mercury</artifactId>
-  	<version>1.0.0-alpha-3-SNAPSHOT</version>
+  	<version>1.0-alpha-5-SNAPSHOT</version>
   </parent>
 
   <artifactId>mercury-compare-mdo</artifactId>
@@ -79,4 +79,4 @@
       </plugin>
     </plugins>
   </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/mercury-maven/mercury-compare-mercury/c b/mercury-maven/mercury-compare-mercury/c
index 624d26e..67816e6 100644
--- a/mercury-maven/mercury-compare-mercury/c
+++ b/mercury-maven/mercury-compare-mercury/c
@@ -1 +1 @@
-mvnDebug -X org.sonatype.maven.plugins:mercury-compare-plugin:1.0-test:compare -DlocalFileDir=./target/repo
+mvnDebug -X org.sonatype.maven.plugins:mercury-compare-plugin:1.0-alpha-5-SNAPSHOT:compare -DlocalFileDir=./target/repo
diff --git a/mercury-maven/mercury-compare-mercury/pom.xml b/mercury-maven/mercury-compare-mercury/pom.xml
index 47bcd41..3d1d678 100644
--- a/mercury-maven/mercury-compare-mercury/pom.xml
+++ b/mercury-maven/mercury-compare-mercury/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0.0-alpha-3-SNAPSHOT</version>
+    <version>1.0-alpha-5-SNAPSHOT</version>
   </parent>
   
   <groupId>org.sonatype.maven.plugins</groupId>
@@ -45,7 +45,7 @@
   </developers>
   
   <properties>
-    <maven.version>3.0-alpha-1</maven.version>
+    <maven.version>3.0-SNAPSHOT</maven.version>
   </properties>
 
   <dependencies>
diff --git a/mercury-maven/mercury-compare-mercury/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryResolve.java b/mercury-maven/mercury-compare-mercury/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryResolve.java
index 196adf0..814c1c7 100644
--- a/mercury-maven/mercury-compare-mercury/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryResolve.java
+++ b/mercury-maven/mercury-compare-mercury/src/main/java/org/sonatype/maven/plugins/mercury/compare/MercuryResolve.java
@@ -55,8 +55,8 @@
 implements IDepResolver
 {
   static final String SYSTEM_PROPERTY_LOCAL_REPO = "localRepo";
-  static final String localRepoDir = System.getProperty( SYSTEM_PROPERTY_LOCAL_REPO, "../localRepoMercury" );
-//  static final String localRepoDir = System.getProperty( SYSTEM_PROPERTY_LOCAL_REPO, "../localRepoMaven" );
+//  static final String localRepoDir = System.getProperty( SYSTEM_PROPERTY_LOCAL_REPO, "../localRepoMercury" );
+  static final String localRepoDir = System.getProperty( SYSTEM_PROPERTY_LOCAL_REPO, "/app/maven.repo" );
   static final File   localRepoDirFile = new File( localRepoDir );
   
   static final String SYSTEM_PROPERTY_LIST_FILE = "list";
@@ -121,6 +121,7 @@
       }
       
       depBuilder = DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+//      depBuilder.register( new DumbListener() );
   
     
       DataBuilder.visitDeps( listFile, mc );
@@ -162,10 +163,18 @@
     MetadataTreeNode.showNode( root, 0 );
     
     long ll = System.currentTimeMillis();
-    System.out.println("BuildTree: " + (ll - start) );
+    long interval = ll - start;
+    int  count = root.countNodes();
+    long timePerNode = count == 0L ? 0 :  interval / count;  
+        
+    System.out.println("BuildTree: " + (ll - start)+" ms, " + count + " nodes, " + timePerNode+ " ms per node" );
     
     List<ArtifactMetadata> dl = depBuilder.resolveConflicts( root );
-    System.out.println("resolveDeps: " + (System.currentTimeMillis() - ll) );
+    interval = System.currentTimeMillis() - ll;
+    count =  dl == null ? 0 : dl.size();
+    timePerNode = count == 0L ? 0 :  interval / count;  
+    
+    System.out.println("resolveDeps: " + interval+ " ms, "+ count+" nodes, "+ timePerNode+" ms per node" );
     
     File df = DataBuilder.getFile( targetDirFile, bmd.getGroupId(), bmd.getArtifactId(), bmd.getVersion(), bmd.getType() );
     
@@ -176,7 +185,9 @@
     if( df.exists() )
     {
       deps = DataBuilder.read( df );
+      
       List l = deps.getMercury();
+      
       if( !Util.isEmpty( l ) )
         l.clear();
     }
@@ -192,17 +203,18 @@
     
     deps.setMercuryMillis( System.currentTimeMillis() - start );
     
-    for( ArtifactMetadata am : dl )
-    {
-      Dependency dep = new Dependency();
-      dep.setGroupId( am.getGroupId() );
-      dep.setArtifactId( am.getArtifactId() );
-      dep.setVersion( am.getVersion() );
-      dep.setType( am.getType() );
-      dep.setScope( am.getScope() );
-      
-      deps.addMercury( dep );
-    }
+    if(dl != null)
+        for( ArtifactMetadata am : dl )
+        {
+          Dependency dep = new Dependency();
+          dep.setGroupId( am.getGroupId() );
+          dep.setArtifactId( am.getArtifactId() );
+          dep.setVersion( am.getVersion() );
+          dep.setType( am.getType() );
+          dep.setScope( am.getScope() );
+          
+          deps.addMercury( dep );
+        }
     
     DataBuilder.write( deps, df );
     
diff --git a/mercury-maven/repositories.properties b/mercury-maven/repositories.properties
index 22a9d2b..0196cc7 100644
--- a/mercury-maven/repositories.properties
+++ b/mercury-maven/repositories.properties
@@ -16,8 +16,8 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
-#sona.central=http://repository.sonatype.org/content/groups/public
-maven.central=http://repo1.maven.org/maven2
+sona.central=http://repository.sonatype.org/content/groups/public
+#maven.central=http://repo1.maven.org/maven2
 #codehaus.snapshots=http://snapshots.repository.codehaus.org
 #apache.snapshots=http://people.apache.org/repo/m2-snapshot-repository
 #codehaus.releases=http://repository.codehaus.org
diff --git a/mercury-maven/results.html b/mercury-maven/results.html
new file mode 100644
index 0000000..56b5912
--- /dev/null
+++ b/mercury-maven/results.html
@@ -0,0 +1,378 @@
+<html><body><table border='1'><tr><th colspan='2'>vdoclet:vdoclet:20070127::jar</th></tr>
+
+<tr><th>Maven: 5 deps in 14201 millis</th><th>Mercury: 5 deps in 1371 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>magicGball:magicGball:0.01234-alpha0::jar</th></tr>
+
+<tr><th>Maven: 2 deps in 3943 millis</th><th>Mercury: 2 deps in 1429 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-util:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 5 deps in 5537 millis</th><th>Mercury: 5 deps in 2740 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-tree:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 2 deps in 1 millis</th><th>Mercury: 2 deps in 6 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-attrs:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 2 deps in 8 millis</th><th>Mercury: 2 deps in 8 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-xml:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 6 deps in 1799 millis</th><th>Mercury: 6 deps in 1119 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-commons:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 2 deps in 1213 millis</th><th>Mercury: 2 deps in 184 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>asm:asm-analysis:2.2.1::jar</th></tr>
+
+<tr><th>Maven: 3 deps in 1 millis</th><th>Mercury: 3 deps in 13 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.0-20050713::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 27569 millis</th><th>Mercury: 14 deps in 4776 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.2.3::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 3450 millis</th><th>Mercury: 14 deps in 329 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.2::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 7245 millis</th><th>Mercury: 14 deps in 700 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.0-M3::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 6352 millis</th><th>Mercury: 14 deps in 1474 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.2.1::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 4777 millis</th><th>Mercury: 14 deps in 229 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.2.2::jar</th></tr>
+
+<tr><th>Maven: 12 deps in 3192 millis</th><th>Mercury: 14 deps in 226 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql:1.0-M2::jar</th></tr>
+
+<tr><th>Maven: 11 deps in 5209 millis</th><th>Mercury: 13 deps in 402 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql-connector:1.1::jar</th></tr>
+
+<tr><th>Maven: 11 deps in 3059 millis</th><th>Mercury: 13 deps in 666 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql-connector:1.0::jar</th></tr>
+
+<tr><th>Maven: 11 deps in 2101 millis</th><th>Mercury: 13 deps in 397 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql-connector:1.0-M3::jar</th></tr>
+
+<tr><th>Maven: 11 deps in 2972 millis</th><th>Mercury: 13 deps in 357 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>tranql:tranql-connector:1.0-20050716::jar</th></tr>
+
+<tr><th>Maven: 11 deps in 1973 millis</th><th>Mercury: 13 deps in 242 millis</th></tr><tr>
+
+<td>
+net.java.dev.javacc:javacc:3.2::jar:compile<br/>
+
+</td>
+
+<td>
+javacc:javacc:3.2::jar:compile<br/>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>jmimemagic:jmimemagic:0.0.4a::jar</th></tr>
+
+<tr><th>Maven: 5 deps in 12956 millis</th><th>Mercury: 5 deps in 164 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>jmimemagic:jmimemagic:0.1.1::jar</th></tr>
+
+<tr><th>Maven: 7 deps in 2476 millis</th><th>Mercury: 10 deps in 1458 millis</th></tr><tr>
+
+<td>
+xerces:xercesImpl:2.4.0::jar:runtime<br/>
+xml-apis:xml-apis:1.0.b2::jar:compile<br/>
+
+</td>
+
+<td>
+logkit:logkit:1.0.1::jar:compile<br/>
+avalon-framework:avalon-framework:4.1.3::jar:compile<br/>
+xerces:xerces:2.4.0::jar:compile<br/>
+xerces:xercesImpl:2.7.1::jar:compile<br/>
+xml-apis:xml-apis:2.0.2::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>jmimemagic:jmimemagic:0.1.2::jar</th></tr>
+
+<tr><th>Maven: 7 deps in 1734 millis</th><th>Mercury: 10 deps in 213 millis</th></tr><tr>
+
+<td>
+xerces:xercesImpl:2.4.0::jar:runtime<br/>
+xml-apis:xml-apis:1.0.b2::jar:compile<br/>
+
+</td>
+
+<td>
+logkit:logkit:1.0.1::jar:compile<br/>
+avalon-framework:avalon-framework:4.1.3::jar:compile<br/>
+xerces:xerces:2.4.0::jar:compile<br/>
+xerces:xercesImpl:2.7.1::jar:compile<br/>
+xml-apis:xml-apis:2.0.2::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>commons-validator:commons-validator:1.2.0::jar</th></tr>
+
+<tr><th>Maven: 7 deps in 77 millis</th><th>Mercury: 10 deps in 41 millis</th></tr><tr>
+
+<td>
+xml-apis:xml-apis:1.0.b2::jar:compile<br/>
+
+</td>
+
+<td>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+avalon-framework:avalon-framework:4.1.3::jar:compile<br/>
+xml-apis:xml-apis:2.0.2::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+<table border='1'><tr><th colspan='2'>commons-httpclient:commons-httpclient:2.0.2::jar</th></tr>
+
+<tr><th>Maven: 2 deps in 1 millis</th><th>Mercury: 4 deps in 25 millis</th></tr><tr>
+
+<td>
+
+</td>
+
+<td>
+log4j:log4j:1.2.6::jar:compile<br/>
+logkit:logkit:1.0.1::jar:compile<br/>
+
+</td>
+
+</tr></table><br/><br/><br/><br/>
+</body></html>
\ No newline at end of file
diff --git a/mercury-md/mercury-md-sat/pom.xml b/mercury-md/mercury-md-sat/pom.xml
index 08303eb..38ccf3b 100644
--- a/mercury-md/mercury-md-sat/pom.xml
+++ b/mercury-md/mercury-md-sat/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-md</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-md-sat</artifactId>
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 1f89dc5..cbb72e5 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
@@ -185,6 +185,32 @@
         // build all trees
         for ( ArtifactBasicMetadata bmd : startMDs )
         {
+            if( inclusions != null )
+            {
+                List<ArtifactBasicMetadata> inc = inclusions.getMetadataList();
+                
+                if( ! inc.contains( bmd ) )
+                    continue;
+                
+                if( bmd.hasInclusions() )
+                    bmd.getInclusions().addAll( inc );
+                else
+                    bmd.setInclusions( inc );
+            }
+            
+            if( exclusions != null )
+            {
+                List<ArtifactBasicMetadata> excl = exclusions.getMetadataList();
+                
+                if( excl.contains( bmd ) )
+                    continue;
+                
+                if( bmd.hasExclusions() )
+                    bmd.getExclusions().addAll( excl );
+                else
+                    bmd.setExclusions( excl );
+            }
+            
             MetadataTreeNode rooty = buildTree( bmd, scope );
 
             deps.add( rooty );
@@ -206,7 +232,6 @@
 
         return res;
     }
-
     // -----------------------------------------------------
     private MetadataTreeNode createNode( ArtifactBasicMetadata nodeMD, MetadataTreeNode parent
                                          , ArtifactBasicMetadata nodeQuery, ArtifactScopeEnum globalScope
diff --git a/mercury-md/mercury-md-shared/pom.xml b/mercury-md/mercury-md-shared/pom.xml
index 2398d53..0cf55a2 100644
--- a/mercury-md/mercury-md-shared/pom.xml
+++ b/mercury-md/mercury-md-shared/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-md</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <groupId>org.apache.maven.mercury</groupId>
diff --git a/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java b/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
index 4f0a229..305da3c 100644
--- a/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
+++ b/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/AddVersionOperation.java
@@ -18,8 +18,10 @@
  */
 package org.apache.maven.mercury.repository.metadata;
 
+import java.util.Collections;
 import java.util.List;
 
+import org.apache.maven.mercury.artifact.version.VersionComparator;
 import org.apache.maven.mercury.util.TimeUtil;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -94,8 +96,35 @@
         }
 
         vs.addVersion( version );
+        
+        List<String> versions = vs.getVersions();
+        
+        Collections.sort( versions, new VersionComparator() );
+        
+        vs.setLatest( getLatestVersion(versions) );
+        
+        vs.setRelease( getReleaseVersion(versions) );
+        
         vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
 
         return true;
     }
+    
+    private String getLatestVersion( List<String> orderedVersions )
+    {
+    	return orderedVersions.get( orderedVersions.size() - 1 );
+    }
+    
+    private String getReleaseVersion( List<String> orderedVersions )
+    {
+        for (int i = orderedVersions.size() - 1; i >= 0; i--) 
+        {
+			if (!orderedVersions.get(i).endsWith("SNAPSHOT")) 
+			{
+				return orderedVersions.get(i);
+			}
+		}
+        
+        return "";
+    }
 }
diff --git a/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java b/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
index 5d8d108..7aef3e7 100644
--- a/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
+++ b/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/SetSnapshotOperation.java
@@ -34,6 +34,8 @@
     private static final Language LANG = new DefaultLanguage( SetSnapshotOperation.class );
 
     private Snapshot snapshot;
+    
+    private String snapshotPomName;
 
     /**
      * @throws MetadataException
@@ -43,17 +45,30 @@
     {
         setOperand( data );
     }
+    
+    public SetSnapshotOperation( StringOperand data )
+    	throws MetadataException
+    {
+    	setOperand( data );
+    }
 
     public void setOperand( Object data )
         throws MetadataException
     {
-        if ( data == null || !( data instanceof SnapshotOperand ) )
+        if ( data != null && data instanceof SnapshotOperand  )
+        {
+        	snapshot = ( (SnapshotOperand) data ).getOperand();
+        }
+        else if ( data != null && data instanceof StringOperand )
+        {
+        	snapshotPomName = ( (StringOperand) data ).getOperand();
+        }
+        else
         {
             throw new MetadataException( LANG.getMessage( "bad.operand", "SnapshotOperand", data == null ? "null"
-                            : data.getClass().getName() ) );
+                    : data.getClass().getName() ) );
         }
 
-        snapshot = ( (SnapshotOperand) data ).getOperand();
     }
 
     /**
@@ -70,19 +85,108 @@
         {
             return false;
         }
-
+        
         Versioning vs = metadata.getVersioning();
 
         if ( vs == null )
         {
             vs = new Versioning();
+
             metadata.setVersioning( vs );
         }
-
-        vs.setSnapshot( snapshot );
-        vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
-
-        return true;
+        
+        if ( snapshotPomName != null )
+        {
+        	return updateSnapshot( snapshotPomName, metadata );
+        }
+        else
+        {
+        	return updateSnapshot( snapshot, vs );
+        }
+        
+    }
+    
+    private boolean updateSnapshot( String snapshotVersion, Metadata metadata )
+    {
+    	Snapshot snapshot = buildSnapshot( snapshotVersion, metadata );
+    	
+    	Snapshot oldSnapshot = metadata.getVersioning().getSnapshot();
+    	
+    	if ( needUpdateSnapshot( oldSnapshot, snapshot) )
+    	{
+    		return updateSnapshot( snapshot, metadata.getVersioning() );
+    	}
+    	
+    	return false;
+    	
+    	
+    }
+    
+    private boolean updateSnapshot( Snapshot snapshot, Versioning vs )
+    {
+    	vs.setSnapshot( snapshot );
+    	
+    	vs.setLastUpdated( TimeUtil.getUTCTimestamp() );
+    	
+    	return true;
+    }
+    
+    private boolean needUpdateSnapshot( Snapshot oldSnapshot, Snapshot newSnapshot )
+    {
+    	if ( newSnapshot == null )
+    	{
+    		return false;
+    	}
+    	
+    	if ( oldSnapshot == null )
+    	{
+    		return true;
+    	}
+    	
+    	if ( oldSnapshot.getBuildNumber() < newSnapshot.getBuildNumber() )
+    	{
+    		return true;
+    	}
+    	
+    	return false;
+    }
+    
+    private Snapshot buildSnapshot( String pomName, Metadata md )
+    {
+        // skip files like groupId-artifactId-versionSNAPSHOT.pom
+        if ( pomName.endsWith( "SNAPSHOT.pom" ) )
+        {
+            return null;
+        }
+        
+        Snapshot result = new Snapshot();
+        
+        int lastHyphenPos = pomName.lastIndexOf( '-' );
+        
+        try
+        {
+            int buildNumber = Integer.parseInt( pomName.substring(
+                lastHyphenPos + 1,
+                pomName.length() - 4 ) );
+            
+            String timestamp = pomName.substring( ( md.getArtifactId() + '-' + md.getVersion() + '-' )
+                    .length()
+                    - "-SNAPSHOT".length(), lastHyphenPos );
+            
+            result.setLocalCopy( false );
+            
+            result.setBuildNumber( buildNumber );
+            
+            result.setTimestamp( timestamp );
+            
+            return result;
+        }
+        catch ( Exception e )
+        {
+            // skip any exception because of illegal version numbers
+        	return null;
+        }        
+        
     }
 
 }
diff --git a/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java b/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
index 4e0a4d1..56f669a 100644
--- a/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
+++ b/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.Assert;
 import junit.framework.TestCase;
 
 import org.apache.maven.mercury.util.FileUtil;
@@ -60,6 +61,26 @@
   throws Exception
   {
   }
+  
+	protected Metadata getMetadata(File file) 
+		throws Exception 
+	{
+		byte[] targetBytes = FileUtil.readRawData(file);
+
+		return MetadataBuilder.getMetadata(targetBytes);
+	}
+
+	protected Metadata applyOpsAndGetMetadata(Metadata metadata,
+			List<MetadataOperation> ops, File file) 
+		throws Exception 
+	{
+		byte[] resBytes = MetadataBuilder.changeMetadata(metadata, ops);
+
+		FileUtil.writeRawData(file, resBytes);
+
+		return MetadataBuilder.read(new FileInputStream(file));
+	}
+  
   //-------------------------------------------------------------------------
   public void testReadGroupMd()
   throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
@@ -184,21 +205,76 @@
      assertTrue( versions.contains("1.0.0") );
      assertTrue( versions.contains("2.0.0") );
   }
+  
+  public void testAddVersionOperationOrdered() throws Exception 
+  {
+    File mdFileBefore = new File(testBase, "group-maven-metadata.xml");
+    Metadata mdBefore = getMetadata( mdFileBefore );
+    
+    List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+    ops.add(new AddVersionOperation( new StringOperand("1.3.0-SNAPSHOT") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.2.0-SNAPSHOT") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.2.0.5-SNAPSHOT") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.1") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.3-SNAPSHOT") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.1-M1") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.0-alpha-5") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.2.0") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.2.0-beta-1") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.0.1") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.0-beta-3") ));
+    ops.add(new AddVersionOperation( new StringOperand("4.1.0") ));
+    ops.add(new AddVersionOperation( new StringOperand("1.0.0-beta-6-SNAPSHOT") ));
+    ops.add(new AddVersionOperation( new StringOperand("5.0-SNAPSHOT") ));
+
+    List<String> orderedVersions = new ArrayList<String>();
+    orderedVersions.add( "1.0.0-alpha-5" );
+    orderedVersions.add( "1.0.0-beta-3" );
+    orderedVersions.add( "1.0.0-beta-6-SNAPSHOT" );
+    orderedVersions.add( "1" );
+    orderedVersions.add( "1.0.0.1" );
+    orderedVersions.add( "1.0.1" );
+    orderedVersions.add( "1.0.3-SNAPSHOT" );
+    orderedVersions.add( "1.1-M1" );
+    orderedVersions.add( "1.2.0-SNAPSHOT" );
+    orderedVersions.add( "1.2.0-beta-1" );
+    orderedVersions.add( "1.2.0" );
+    orderedVersions.add( "1.2.0.5-SNAPSHOT" );
+    orderedVersions.add( "1.3.0-SNAPSHOT" );
+    orderedVersions.add( "2" );
+    orderedVersions.add( "3" );
+    orderedVersions.add( "4" );
+    orderedVersions.add( "4.1.0" );
+    orderedVersions.add( "5.0-SNAPSHOT" );
+    
+    File mdFileAfter = new File( testBase, "group-maven-metadata-write.xml");
+    Metadata mdAfter = applyOpsAndGetMetadata( mdBefore, ops, mdFileAfter );
+    
+    Assert.assertEquals(orderedVersions, mdAfter.getVersioning().getVersions());
+    Assert.assertEquals("5.0-SNAPSHOT", mdAfter.getVersioning().getLatest());
+    Assert.assertEquals("4.1.0", mdAfter.getVersioning().getRelease());
+    
+  }
+  
   //-------------------------------------------------------------------------
   public void testAddVersionOperation()
-  throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+  throws Exception
   {
-    File groupMd = new File( testBase, "group-maven-metadata.xml");
-    byte [] targetBytes = FileUtil.readRawData( groupMd );
-
-    byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, new AddVersionOperation( new StringOperand("5") ) );
+	 // prepare
+	 File groupMd = new File( testBase, "group-maven-metadata.xml");
+	    
+	 Metadata md = getMetadata(groupMd);
+	    
+	 List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+	    
+	 ops.add(new AddVersionOperation( new StringOperand("5")));
+   
+     File resFile = new File( testBase, "group-maven-metadata-write.xml");
     
-    File resFile = new File( testBase, "group-maven-metadata-write.xml");
+     // do
+     Metadata mmd = applyOpsAndGetMetadata( md, ops, resFile);
 
-    FileUtil.writeRawData( resFile, resBytes );
-    
-     Metadata mmd = MetadataBuilder.read( new FileInputStream(resFile) );
-
+     // assert
      assertNotNull( mmd );
      assertEquals("a", mmd.getGroupId() );
      assertEquals("a", mmd.getArtifactId() );
@@ -218,12 +294,11 @@
   }
   //-------------------------------------------------------------------------
   public void testAddVersionTwiceOperation()
-  throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+  throws Exception
   {
     File groupMd = new File( testBase, "group-maven-metadata.xml");
-    byte [] targetBytes = FileUtil.readRawData( groupMd );
     
-    Metadata checkMd = MetadataBuilder.getMetadata( targetBytes ); 
+    Metadata checkMd = getMetadata(groupMd);
 
     assertNotNull( checkMd );
     assertEquals("a", checkMd.getGroupId() );
@@ -246,13 +321,10 @@
     ops.add( new AddVersionOperation( new StringOperand("5") ) );
     ops.add( new AddVersionOperation( new StringOperand("5") ) );
 
-    byte [] resBytes = MetadataBuilder.changeMetadata( targetBytes, ops );
     
     File resFile = new File( testBase, "group-maven-metadata-write.xml");
 
-    FileUtil.writeRawData( resFile, resBytes );
-    
-     Metadata mmd = MetadataBuilder.read( new FileInputStream(resFile) );
+     Metadata mmd = applyOpsAndGetMetadata(checkMd, ops, resFile);
 
      assertNotNull( mmd );
      assertEquals("a", mmd.getGroupId() );
@@ -302,6 +374,29 @@
      assertTrue( versions.contains("3") );
      assertTrue( versions.contains("4") );
   }
+  
+  public void testSetSnapshotVersionOperation()
+  throws Exception
+  {
+	  File mdFileBefore = new File(testBase, "group-maven-metadata.xml");
+	  Metadata mdBefore = getMetadata( mdFileBefore );
+	  
+	  mdBefore.setVersion("1.3.0-SNAPSHOT");
+	  
+	  List<MetadataOperation> ops = new ArrayList<MetadataOperation>();
+	  ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.041603-374.pom" ) ) );
+	  ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.030701-373.pom" ) ) );
+	  ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.090218-375.pom" ) ) );
+	  ops.add( new SetSnapshotOperation( new StringOperand( "a-1.3.0-20090210.095716-376.pom" ) ) );
+	  
+	  File mdFileAfter = new File( testBase, "group-maven-metadata-write.xml");
+	  Metadata mdAfter = applyOpsAndGetMetadata( mdBefore, ops, mdFileAfter );
+	  
+	  Assert.assertEquals("20090210.095716", mdAfter.getVersioning().getSnapshot().getTimestamp());
+	  Assert.assertEquals(376, mdAfter.getVersioning().getSnapshot().getBuildNumber());
+  }
+  
+  
   //-------------------------------------------------------------------------
   public void testSetSnapshotOperation()
   throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
diff --git a/mercury-md/pom.xml b/mercury-md/pom.xml
index c98b3af..01fa629 100644
--- a/mercury-md/pom.xml
+++ b/mercury-md/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-md</artifactId>
   <packaging>pom</packaging>
diff --git a/mercury-plexus/pom.xml b/mercury-plexus/pom.xml
index 89ef71e..c06cdbf 100644
--- a/mercury-plexus/pom.xml
+++ b/mercury-plexus/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-plexus</artifactId>
diff --git a/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/Messages.properties b/mercury-plexus/src/main/resources/org/apache/maven/mercury/plexus/Messages.properties
similarity index 100%
rename from mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/Messages.properties
rename to mercury-plexus/src/main/resources/org/apache/maven/mercury/plexus/Messages.properties
diff --git a/mercury-repo/mercury-repo-api/pom.xml b/mercury-repo/mercury-repo-api/pom.xml
index 4188f06..a707bf0 100644
--- a/mercury-repo/mercury-repo-api/pom.xml
+++ b/mercury-repo/mercury-repo-api/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <groupId>org.apache.maven.mercury</groupId>
diff --git a/mercury-repo/mercury-repo-cache-fs/pom.xml b/mercury-repo/mercury-repo-cache-fs/pom.xml
index 1048bbd..333732d 100644
--- a/mercury-repo/mercury-repo-cache-fs/pom.xml
+++ b/mercury-repo/mercury-repo-cache-fs/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
   
   <groupId>org.apache.maven.mercury</groupId>
diff --git a/mercury-repo/mercury-repo-local-flat/pom.xml b/mercury-repo/mercury-repo-local-flat/pom.xml
index 82e5c27..c44989d 100644
--- a/mercury-repo/mercury-repo-local-flat/pom.xml
+++ b/mercury-repo/mercury-repo-local-flat/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <groupId>org.apache.maven.mercury</groupId>
diff --git a/mercury-repo/mercury-repo-local-m2/pom.xml b/mercury-repo/mercury-repo-local-m2/pom.xml
index 1fea49b..81de9fb 100644
--- a/mercury-repo/mercury-repo-local-m2/pom.xml
+++ b/mercury-repo/mercury-repo-local-m2/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-repo-local-m2</artifactId>
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 866d35a..1b3dcfc 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
@@ -145,6 +145,24 @@
     
     return ver;
   }
+  
+  public static String getTS( String ver  )
+  {
+    if( ver == null )
+      return null;
+    
+    int li = ver.lastIndexOf( '-' );
+    
+    if( li < 1 )
+        return ver;
+    
+    int li2 = ver.substring( 0, li ).lastIndexOf( '-' );
+    
+    if( li2 > 0 )
+        return ver.substring( li2+1 );
+    
+    return ver;
+  }
   //---------------------------------------------------------------------------------------------------------------
   public static String calculateVersionDir( String ver )
   {
diff --git a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
index 7df74a0..9efd39c 100644
--- a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
+++ b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryM2.java
@@ -28,11 +28,15 @@
 import org.apache.maven.mercury.repository.api.RepositoryReader;
 import org.apache.maven.mercury.repository.api.RepositoryWriter;
 import org.apache.maven.mercury.transport.api.Server;
+import org.codehaus.plexus.lang.DefaultLanguage;
+import org.codehaus.plexus.lang.Language;
 
 public class LocalRepositoryM2
 extends AbstractRepository
 implements LocalRepository
 {
+    private static final Language LANG = new DefaultLanguage( LocalRepositoryM2.class );
+
     private File directory;
     
     public static final String METADATA_FILE_NAME = "maven-metadata-local.xml";
@@ -41,11 +45,14 @@
     private void setDirectory( File directory )
     {
       if( directory == null )
-        throw new IllegalArgumentException( "null.directory" );
+        throw new IllegalArgumentException( LANG.getMessage( "null.directory" ) );
       
       if( !directory.exists() )
         directory.mkdirs();
 
+      if( !directory.isDirectory() )
+          throw new IllegalArgumentException( LANG.getMessage( "file.directory", directory.getAbsolutePath() ) );
+        
       this.directory = directory;
     }
     //----------------------------------------------------------------------------------
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 8535031..ef77035 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,18 +19,22 @@
 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;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.apache.maven.mercury.artifact.Artifact;
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 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;
 import org.apache.maven.mercury.artifact.version.VersionRangeFactory;
@@ -53,6 +57,7 @@
 import org.apache.maven.mercury.repository.api.RepositoryException;
 import org.apache.maven.mercury.repository.api.RepositoryReader;
 import org.apache.maven.mercury.util.FileUtil;
+import org.apache.maven.mercury.util.Util;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
 
@@ -118,46 +123,34 @@
         // RELEASE = LATEST - SNAPSHOTs
         if ( Artifact.RELEASE_VERSION.equals( loc.getVersion() ) || Artifact.LATEST_VERSION.equals( loc.getVersion() ) )
         {
-            boolean noSnapshots = Artifact.RELEASE_VERSION.equals( loc.getVersion() );
+            final boolean noSnapshots = Artifact.RELEASE_VERSION.equals( loc.getVersion() );
             loc.setVersion( null );
-            DefaultArtifactVersion tempDav = null;
-            DefaultArtifactVersion tempDav2 = null;
+            
+            final TreeSet<String> ts = new TreeSet<String>( new VersionComparator() );
 
-            File[] files = gaDir.listFiles();
-
-            if( files != null && files.length > 0 )
-                // find latest
-                for ( File vf : files )
-                {
-                    if ( vf.isFile() )
-                        continue;
-    
-                    String vn = vf.getName();
-    
-                    // RELEASE?
-                    if ( noSnapshots && vn.endsWith( Artifact.SNAPSHOT_VERSION ) )
-                        continue;
-    
-                    if ( loc.getVersion() == null )
-                    {
-                        loc.setVersion( vn );
-                        tempDav = new DefaultArtifactVersion( vn );
-                        continue;
-                    }
-    
-                    tempDav2 = new DefaultArtifactVersion( vn );
-                    if ( tempDav2.compareTo( tempDav ) > 0 )
-                    {
-                        loc.setVersion( vn );
-                        tempDav = tempDav2;
-                    }
-    
-                }
-
-            if ( loc.getVersion() == null )
+            gaDir.listFiles(
+                     new FilenameFilter()
+                     {
+                        public boolean accept( File dir, String name )
+                        {   
+                            if( new File(dir,name).isDirectory() )
+                            {
+                                if( noSnapshots && name.endsWith( Artifact.SNAPSHOT_VERSION ) )
+                                    return false;
+                                
+                                ts.add( name );
+                                return true;
+                            }
+                            return false;
+                        }
+                         
+                     }
+                           );
+            
+            if( !ts.isEmpty() )
+                loc.setVersion( ts.last() );
+            else
             {
-//                res.addError( bmd, new RepositoryException( LANG.getMessage( "gav.not.found", bmd.toString(),
-//                                                                             loc.getGaPath() ) ) );
                 if( LOG.isErrorEnabled() )
                     LOG.error( LANG.getMessage( "gav.not.found", bmd.toString(), loc.getGaPath() ) );
                 return null;
@@ -414,7 +407,7 @@
     }
 
     // ---------------------------------------------------------------------------------------------------------------
-    private static boolean findLatestSnapshot( ArtifactBasicMetadata bmd, ArtifactLocation loc, AbstractRepOpResult res )
+    private static boolean findLatestSnapshot( final ArtifactBasicMetadata bmd, final ArtifactLocation loc, AbstractRepOpResult res )
     {
         File binary = new File( loc.getAbsPath() );
 
@@ -423,51 +416,43 @@
 
         // no real SNAPSHOT file, let's try to find one
         File gavDir = new File( loc.getAbsGavPath() );
-        File[] files = gavDir.listFiles();
-        loc.setVersion( null );
-        DefaultArtifactVersion tempDav = null;
-        DefaultArtifactVersion tempDav2 = null;
-
-        int aLen = loc.getBaseName().length();
-
-        if( files != null && files.length > 0 )
-            // find latest
-            for ( File vf : files )
-            {
-                if ( vf.isFile() )
-                    continue;
+        
+        String classifier = Util.isEmpty( bmd.getClassifier() ) ? "" : '-'+bmd.getClassifier();
+        
+        final String regEx = Artifact.SNAPSHOT_TS_REGEX + classifier + "\\."+bmd.getCheckedType();
+        
+        final TreeSet<String> ts = new TreeSet<String>( new VersionComparator() );
+        
+        final int pos = bmd.getArtifactId().length() + 1;
+        
+        gavDir.listFiles( new FilenameFilter()
+                            {
+                                public boolean accept( File dir, String name )
+                                {
+                                    if( name.matches( regEx ) )
+                                    {
+                                        String ver = name.substring( pos, name.lastIndexOf( '.' ) );
+                                        
+                                        ts.add( ver );
+                                        
+                                        return true;
+                                    }
     
-                String vn = vf.getName().substring( aLen + 1 );
-    
-                // no snapshots
-                if ( vn.endsWith( Artifact.SNAPSHOT_VERSION ) )
-                    continue;
-    
-                if ( loc.getVersion() == null )
-                {
-                    loc.setVersion( vn );
-                    tempDav = new DefaultArtifactVersion( vn );
-                    continue;
-                }
-    
-                tempDav2 = new DefaultArtifactVersion( vn );
-                if ( tempDav2.compareTo( tempDav ) > 0 )
-                {
-                    loc.setVersion( vn );
-                    tempDav = tempDav2;
-                }
-    
-            }
-
-        if ( loc.getVersion() == null )
+                                    return false;
+                                }
+                                
+                            }
+                          );
+        
+        if( ts.isEmpty() )
         {
-//            res.addError( bmd, new RepositoryException( LANG.getMessage( "snapshot.not.found", bmd.toString(),
-//                                                                         gavDir.getAbsolutePath() ) ) );
             if( LOG.isErrorEnabled() )
                 LOG.error( LANG.getMessage( "snapshot.not.found", bmd.toString(), gavDir.getAbsolutePath() )  );
-                
+            
             return false;
         }
+        
+        loc.setVersion( ts.last() );
 
         return true;
     }
diff --git a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties
index 6cd0926..f58048a 100644
--- a/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties
+++ b/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties
@@ -30,4 +30,7 @@
 signature.failed=Signature "{0}": verification failed for file {1}
 cannot.read.signature.file=Cannot read signature file {0}, error: {1}
 cannot.lock.gav=Cannot lock GAV folder {0} in {1} millis
-file.is.empty=File {0} exists, but is empty. Data corruption somewhere - please repair metadata.
\ No newline at end of file
+file.is.empty=File {0} exists, but is empty. Data corruption somewhere - please repair metadata.
+
+null.directory=supplied local repo root is null
+file.directory=supplied local repo root is not a folder: {0}
\ No newline at end of file
diff --git a/mercury-repo/mercury-repo-local-map/pom.xml b/mercury-repo/mercury-repo-local-map/pom.xml
index 9da5200..5de0a09 100644
--- a/mercury-repo/mercury-repo-local-map/pom.xml
+++ b/mercury-repo/mercury-repo-local-map/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-repo-local-map</artifactId>
diff --git a/mercury-repo/mercury-repo-remote-m2/pom.xml b/mercury-repo/mercury-repo-remote-m2/pom.xml
index 6a76886..7522505 100644
--- a/mercury-repo/mercury-repo-remote-m2/pom.xml
+++ b/mercury-repo/mercury-repo-remote-m2/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-repo-remote-m2</artifactId>
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 7b47c98..805063b 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
@@ -498,11 +498,18 @@
     
     gam.getVersions().clear();
     
+    boolean requestRelease = bmd.getVersion().endsWith( Artifact.RELEASE_VERSION );
+    // GA metadata version scan
     for( String v : vRes )
     {
         String toAdd;
         
-        if( v.endsWith( Artifact.SNAPSHOT_VERSION )  )
+        boolean foundSnapshot = v.endsWith( Artifact.SNAPSHOT_VERSION );
+        
+        if( requestRelease && foundSnapshot )
+            continue;
+        
+        if( foundSnapshot )
         {
             boolean snFound = false;
             ArtifactBasicMetadata snMd = new ArtifactBasicMetadata( bmd.toString() );
diff --git a/mercury-repo/mercury-repo-virtual/pom.xml b/mercury-repo/mercury-repo-virtual/pom.xml
index 1e50be6..3bedd7f 100644
--- a/mercury-repo/mercury-repo-virtual/pom.xml
+++ b/mercury-repo/mercury-repo-virtual/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-repo</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
   
   <artifactId>mercury-repo-virtual</artifactId>
diff --git a/mercury-repo/pom.xml b/mercury-repo/pom.xml
index 50d49f0..9e3af43 100644
--- a/mercury-repo/pom.xml
+++ b/mercury-repo/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version> </parent>
+    <version>1.0-alpha-5</version> </parent>
 
   <artifactId>mercury-repo</artifactId>
   <packaging>pom</packaging>
diff --git a/mercury-transport/mercury-transport-api/pom.xml b/mercury-transport/mercury-transport-api/pom.xml
index e77649f..933893c 100644
--- a/mercury-transport/mercury-transport-api/pom.xml
+++ b/mercury-transport/mercury-transport-api/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-transport</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-transport-api</artifactId>
diff --git a/mercury-transport/mercury-transport-file/pom.xml b/mercury-transport/mercury-transport-file/pom.xml
index 4493c48..db2da54 100644
--- a/mercury-transport/mercury-transport-file/pom.xml
+++ b/mercury-transport/mercury-transport-file/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-transport</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-transport-file</artifactId>
diff --git a/mercury-transport/mercury-transport-http/pom.xml b/mercury-transport/mercury-transport-http/pom.xml
index 09ab1e0..3b6b50f 100644
--- a/mercury-transport/mercury-transport-http/pom.xml
+++ b/mercury-transport/mercury-transport-http/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury-transport</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-transport-http</artifactId>
diff --git a/mercury-transport/pom.xml b/mercury-transport/pom.xml
index f75891a..ffb74d5 100644
--- a/mercury-transport/pom.xml
+++ b/mercury-transport/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-transport</artifactId>
diff --git a/mercury-util/pom.xml b/mercury-util/pom.xml
index 1406e23..ed96470 100644
--- a/mercury-util/pom.xml
+++ b/mercury-util/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-util</artifactId>
diff --git a/mercury-wagon/pom.xml b/mercury-wagon/pom.xml
index 64ecffb..4f94aa9 100644
--- a/mercury-wagon/pom.xml
+++ b/mercury-wagon/pom.xml
@@ -23,30 +23,13 @@
   <parent>
     <groupId>org.apache.maven.mercury</groupId>
     <artifactId>mercury</artifactId>
-    <version>1.0-alpha-5-SNAPSHOT</version>
+    <version>1.0-alpha-5</version>
   </parent>
 
   <artifactId>mercury-wagon</artifactId>
 
   <name>Mercury Wagon provider</name>
 
-  <distributionManagement>
-    <snapshotRepository>
-      <id>${distMgmtSnapshotsId}</id>
-      <name>${distMgmtSnapshotsName}</name>
-      <url>${distMgmtSnapshotsUrl}</url>
-    </snapshotRepository>
-  </distributionManagement>
-  
-  <properties>
-    <mercury.version>${project.version}</mercury.version>
-
-    <distMgmtSnapshotsId>apache.snapshots</distMgmtSnapshotsId>
-    <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
-    <distMgmtSnapshotsUrl>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</distMgmtSnapshotsUrl>
-
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>
diff --git a/pom.xml b/pom.xml
index 8dfbf49..ac4f890 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
 
   <groupId>org.apache.maven.mercury</groupId>
   <artifactId>mercury</artifactId>
-  <version>1.0-alpha-5-SNAPSHOT</version>
+  <version>1.0-alpha-5</version>
   <packaging>pom</packaging>
 
   <name>Mercury</name>
@@ -76,6 +76,8 @@
     <plexus.lang.version>1.1</plexus.lang.version>
     <plexus.component.metadata.version>1.0-beta-3.0.1</plexus.component.metadata.version>
     
+    <emma4it.plugin.version>1.0</emma4it.plugin.version>
+    
     <commons.digester.version>1.8</commons.digester.version>
     <commons.cli.version>1.1</commons.cli.version>
     
@@ -99,27 +101,35 @@
 
     <distMgmtReleasesId>apache.releases</distMgmtReleasesId>
     <distMgmtReleasesName>Apache Releases</distMgmtReleasesName>
+<!-- 
     <distMgmtReleasesUrl>scp://people.apache.org/www/people.apache.org/repo/m2-release-repository</distMgmtReleasesUrl>
+ -->
+    <distMgmtReleasesUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtReleasesUrl>
 
     <distMgmtSnapshotsId>apache.snapshots</distMgmtSnapshotsId>
     <distMgmtSnapshotsName>Apache Snapshots</distMgmtSnapshotsName>
+<!-- 
     <distMgmtSnapshotsUrl>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</distMgmtSnapshotsUrl>
+ -->
+    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
   </properties>
-  
- 
- <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/mercury/trunk/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/mercury/trunk/</developerConnection>
-    <url>http://svn.apache.org/viewvc/maven/mercury/trunk/</url>
+
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/mercury/tags/mercury-1.0-alpha-5</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/mercury/tags/mercury-1.0-alpha-5</developerConnection>
+    <url>http://svn.apache.org/viewvc/maven/mercury/tags/mercury-1.0-alpha-5</url>
   </scm>
+  
   <issueManagement>
     <system>jira</system>
     <url>http://jira.codehaus.org/browse/MERCURY</url>
   </issueManagement>
+
   <ciManagement>
     <system>hudson</system>
     <url>http://grid.sonatype.org/ci/view/Mercury/job/mercury</url>
   </ciManagement>
+
   <distributionManagement>
     <repository>
       <id>${distMgmtReleasesId}</id>
@@ -487,13 +497,17 @@
     </testResources>
     
     <pluginManagement>
+
       <plugins>
         <plugin>
           <artifactId>maven-release-plugin</artifactId>
-          <version>2.0-beta-7</version>
+        <version>2.0-beta-8</version>
           <configuration>
             <tagBase>https://svn.apache.org/repos/asf/maven/mercury/tags</tagBase>
             <autoVersionSubmodules>true</autoVersionSubmodules>
+            <useReleaseProfile>false</useReleaseProfile>
+            <goals>deploy</goals>
+            <arguments>-Prelease</arguments>
           </configuration>
         </plugin>
         <plugin>
@@ -515,6 +529,11 @@
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <executions>
           <execution>
@@ -570,84 +589,82 @@
     </plugins>
   </build>
 
+
+
   <profiles>
-    <profile>
-      <id>mercury.install.all</id>
-      <activation>
-        <property>
-          <name>mercury.install.all</name>
-          <value>true</value>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.0-alpha-3</version>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>enforce</goal>
-                </goals>
-                <configuration>
-                  <rules>
-                    <requireMavenVersion>
-                      <version>[2.0.9,)</version>
-                    </requireMavenVersion>
-                    <requireJavaVersion>
-                      <version>1.5.0</version>
-                    </requireJavaVersion>
-                  </rules>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>cobertura-maven-plugin</artifactId>
-            <version>2.0</version>
-            <executions>
-              <execution>
-                <id>clean</id>
-                <goals>
-                  <goal>clean</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <version>2.2</version>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
+
+<profile>
+  <id>release</id>
+  <build>
+    <plugins>
+      <!-- We want to sign the artifact, the POM, and all attached artifacts -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-gpg-plugin</artifactId>
+        <configuration>
+           <passphrase>${gpg.passphrase}</passphrase>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>sign</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- We want to deploy the artifact to a staging location for perusal -->
+      <plugin>
+        <inherited>true</inherited>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <altDeploymentRepository>${deploy.altRepository}</altDeploymentRepository>
+          <updateReleaseInfo>true</updateReleaseInfo>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <configuration>
+          <encoding>${project.build.sourceEncoding}</encoding>
+        </configuration>
+        <executions>
+          <execution>
+            <id>attach-javadocs</id>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!--plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>clirr-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>clirr-check</id>
+            <phase>package</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin-->
+    </plugins>
+  </build>
+</profile>
 
     <profile>
       <id>reporting-aggregate</id>