diff --git a/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java b/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
index 039f6f8..2e40e67 100644
--- a/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
+++ b/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.channels.UnsupportedAddressTypeException;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -31,6 +32,9 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.metadata.AbstractArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -42,6 +46,7 @@
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
+import org.apache.maven.shared.transfer.metadata.ArtifactMetadata;
 import org.apache.maven.shared.transfer.repository.RepositoryManager;
 
 /**
@@ -113,6 +118,15 @@
             artifactWithClassifier.setRepository( session.getProjectBuildingRequest().getLocalRepository() );
 
             Collection<Artifact> mavenArtifacts = Arrays.<Artifact>asList( artifact, artifactWithClassifier );
+            
+            for ( Artifact a : mavenArtifacts )
+            {
+                File camVfile = File.createTempFile( "test-deploy", ".camV", artifactsDirectory );
+                a.addMetadata( new CustomArtifactMetadata( a, camVfile, true ) );
+                
+                File camGfile = File.createTempFile( "test-deploy", ".camG", artifactsDirectory );
+                a.addMetadata( new CustomArtifactMetadata( a, camGfile, false ) );
+            }
 
             deployer.deploy( session.getProjectBuildingRequest(), mavenArtifacts );
         }
@@ -126,4 +140,77 @@
         }
     }
 
+    private class CustomArtifactMetadata extends AbstractArtifactMetadata implements ArtifactMetadata
+    {
+        private final File file;
+
+        private final boolean storedInArtifactVersionDirectory;
+        
+        protected CustomArtifactMetadata( Artifact artifact, File file, boolean storedInArtifactVersionDirectory ) 
+        {
+            super( artifact );   
+            this.file = file;
+            this.storedInArtifactVersionDirectory = storedInArtifactVersionDirectory;
+        }
+        
+        @Override
+        public File getFile() 
+        {
+            return file;
+        }
+        
+        @Override
+        public String getRemoteFilename()
+        {
+            return artifact.getArtifactId() + '-' + artifact.getVersion() + getDotExtension();
+        }
+        
+        @Override
+        public String getLocalFilename( ArtifactRepository repository )
+        {
+            return artifact.getArtifactId() + '-' + artifact.getVersion() + getDotExtension();
+        }
+        
+        @Override
+        public void storeInLocalRepository( ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+            throws RepositoryMetadataStoreException
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.storeInLocalRepository(ArtifactRepository, ArtifactRepository)");   
+        }
+        
+        @Override
+        public boolean storedInArtifactVersionDirectory()
+        {
+            return storedInArtifactVersionDirectory;
+        }
+        
+        @Override
+        public void merge( org.apache.maven.artifact.metadata.ArtifactMetadata metadata )
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.merge(ArtifactMetadata)");
+        }
+
+        @Override
+        public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.merge(ArtifactMetadata)");
+        }
+        
+        @Override
+        public String getBaseVersion()
+        {
+            return artifact.getBaseVersion();
+        }
+
+        @Override
+        public Object getKey()
+        {
+            return artifact.getId() + getDotExtension();
+        }
+        
+        private String getDotExtension() 
+        {
+            return file.getName().substring( file.getName().lastIndexOf( '.' ) );
+        }
+    }
 }
diff --git a/src/it/maven-artifact-deployer-plugin/src/test/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerTest.java b/src/it/maven-artifact-deployer-plugin/src/test/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerTest.java
index 6fcb201..6a9ebd0 100644
--- a/src/it/maven-artifact-deployer-plugin/src/test/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerTest.java
+++ b/src/it/maven-artifact-deployer-plugin/src/test/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerTest.java
@@ -70,6 +70,7 @@
                 .withCliOption( "-DmvnVersion=" + mavenRuntime.getMavenVersion() ) // Might be superfluous
                 .withCliOption( "-B" )
                 .withCliOption( "-V" )
+                .withCliOption( "-e" )
                 .execute( "clean", "verify" );
         //@formatter:on
 
@@ -92,6 +93,8 @@
         File baseDirectoy = new File( localRepo, "ARTIFACT-DEPLOYER-GROUPID-" + mvnVersion + "/ARTIFACTID/VERSION/" );
 
         checkForArtifactFile( baseDirectoy );
+        checkForArtifactGroupMetaFile( baseDirectoy );
+        checkForArtifactVersionMetaFile( baseDirectoy );
         checkForArtifactClassifierFile( baseDirectoy );
 
         assertTrue( new File( localRepo, "ARTIFACT-DEPLOYER-GROUPID-" + mvnVersion
@@ -117,4 +120,22 @@
         assertTrue( "artifactFile md5 not found.", new File( artifactFile.getAbsolutePath() + ".md5" ).exists() );
         assertTrue( "artifactFile sha1 not found.", new File( artifactFile.getAbsolutePath() + ".sha1" ).exists() );
     }
+    
+    private void checkForArtifactGroupMetaFile( File baseDirectoy )
+    {
+        File localFile = new File( baseDirectoy.getParentFile(), "ARTIFACTID-VERSION-local.camG" );
+        File baseFile = new File( baseDirectoy.getParentFile(), "ARTIFACTID-VERSION.camG" );
+        assertTrue( "localFile '" + localFile.getAbsolutePath() + "'", localFile.exists() );
+        assertTrue( "artifactFile md5 not found.", new File( baseFile.getAbsolutePath() + ".md5" ).exists() );
+        assertTrue( "artifactFile sha1 not found.", new File( baseFile.getAbsolutePath() + ".sha1" ).exists() );
+    }
+    
+    private void checkForArtifactVersionMetaFile( File baseDirectoy )
+    {
+        File localFile = new File( baseDirectoy, "ARTIFACTID-VERSION-local.camV" );
+        File baseFile = new File( baseDirectoy, "ARTIFACTID-VERSION.camV" );
+        assertTrue( "localFile '" + localFile.getAbsolutePath() + "'", localFile.exists() );
+        assertTrue( "artifactFile md5 not found.", new File( baseFile.getAbsolutePath() + ".md5" ).exists() );
+        assertTrue( "artifactFile sha1 not found.", new File( baseFile.getAbsolutePath() + ".sha1" ).exists() );
+    }
 }
\ No newline at end of file
diff --git a/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java b/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
index 2a0bf73..f9f1496 100644
--- a/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
+++ b/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
@@ -31,6 +31,9 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.metadata.AbstractArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -42,6 +45,7 @@
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.maven.shared.transfer.metadata.ArtifactMetadata;
 import org.apache.maven.shared.transfer.repository.RepositoryManager;
 
 /**
@@ -111,6 +115,15 @@
             artifactWithClassifier.setFile( tmpFileClassifier );
 
             Collection<Artifact> mavenArtifacts = Arrays.<Artifact>asList( artifact, artifactWithClassifier );
+            
+            for ( Artifact a : mavenArtifacts )
+            {
+                File camVfile = File.createTempFile( "test-install", ".camV", artifactsDirectory );
+                a.addMetadata( new CustomArtifactMetadata( a, camVfile, true ) );
+                
+                File camGfile = File.createTempFile( "test-install", ".camG", artifactsDirectory );
+                a.addMetadata( new CustomArtifactMetadata( a, camGfile, false ) );
+            }
 
             installer.install( session.getProjectBuildingRequest(), mavenArtifacts );
         }
@@ -125,4 +138,77 @@
 
     }
 
+    private class CustomArtifactMetadata extends AbstractArtifactMetadata implements ArtifactMetadata
+    {
+        private final File file;
+
+        private final boolean storedInArtifactVersionDirectory;
+        
+        protected CustomArtifactMetadata( Artifact artifact, File file, boolean storedInArtifactVersionDirectory ) 
+        {
+            super( artifact );   
+            this.file = file;
+            this.storedInArtifactVersionDirectory = storedInArtifactVersionDirectory;
+        }
+        
+        @Override
+        public File getFile() 
+        {
+            return file;
+        }
+        
+        @Override
+        public String getRemoteFilename()
+        {
+            return artifact.getArtifactId() + '-' + artifact.getVersion() + getDotExtension();
+        }
+        
+        @Override
+        public String getLocalFilename( ArtifactRepository repository )
+        {
+            return artifact.getArtifactId() + '-' + artifact.getVersion() + getDotExtension();
+        }
+        
+        @Override
+        public void storeInLocalRepository( ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+            throws RepositoryMetadataStoreException
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.storeInLocalRepository(ArtifactRepository, ArtifactRepository)");   
+        }
+        
+        @Override
+        public boolean storedInArtifactVersionDirectory()
+        {
+            return storedInArtifactVersionDirectory;
+        }
+        
+        @Override
+        public void merge( org.apache.maven.artifact.metadata.ArtifactMetadata metadata )
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.merge(ArtifactMetadata)");
+        }
+
+        @Override
+        public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+        {
+            throw new UnsupportedOperationException("ArtifactDeployerMojo.CustomArtifactMetadata.merge(ArtifactMetadata)");
+        }
+        
+        @Override
+        public String getBaseVersion()
+        {
+            return artifact.getBaseVersion();
+        }
+
+        @Override
+        public Object getKey()
+        {
+            return artifact.getId() + getDotExtension();
+        }
+        
+        private String getDotExtension() 
+        {
+            return file.getName().substring( file.getName().lastIndexOf( '.' ) );
+        }
+    }
 }
diff --git a/src/it/maven-artifact-installer-plugin/src/test/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerTest.java b/src/it/maven-artifact-installer-plugin/src/test/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerTest.java
index a48c51c..7d6a0c3 100644
--- a/src/it/maven-artifact-installer-plugin/src/test/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerTest.java
+++ b/src/it/maven-artifact-installer-plugin/src/test/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerTest.java
@@ -95,6 +95,8 @@
         // We don't have a pom file.
         checkForNonExistingPomFile( baseDirectoy );
         checkForArtifact( baseDirectoy );
+        checkForArtifactGroupMetaFile( baseDirectoy );
+        checkForArtifactVersionMetaFile( baseDirectoy );
         checkForArtifactClassifier( baseDirectoy );
     }
 
@@ -116,6 +118,20 @@
         assertFalse( "artifactFile md5 not found.", new File( artifactFile.getAbsolutePath() + ".md5" ).exists() );
         assertFalse( "artifactFile sha1 not found.", new File( artifactFile.getAbsolutePath() + ".sha1" ).exists() );
     }
+    
+    private void checkForArtifactGroupMetaFile( File baseDirectoy )
+    {
+        File localFile = new File( baseDirectoy.getParentFile(), "ARTIFACTID-VERSION-local.camG" );
+        File baseFile = new File( baseDirectoy.getParentFile(), "ARTIFACTID-VERSION.camG" );
+        assertTrue( "localFile '" + localFile.getAbsolutePath() + "'", localFile.exists() );
+    }
+    
+    private void checkForArtifactVersionMetaFile( File baseDirectoy )
+    {
+        File localFile = new File( baseDirectoy, "ARTIFACTID-VERSION-local.camV" );
+        File baseFile = new File( baseDirectoy, "ARTIFACTID-VERSION.camV" );
+        assertTrue( "localFile '" + localFile.getAbsolutePath() + "'", localFile.exists() );
+    }
 
     private void checkForNonExistingPomFile( File baseDirectoy )
     {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
index 64d9249..83cc6a2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
@@ -29,6 +29,7 @@
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
+import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.aether.RepositorySystem;
@@ -109,9 +110,12 @@
                 {
                     // eaten, handled by repo system
                 }
-                else
+                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
-                    // request.addMetadata( new MetadataBridge( metadata ) );
+                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
+                                    ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
+                    
+                    request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
                 }
             }
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
index 82dbf8f..71594de 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
@@ -29,6 +29,7 @@
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
 import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
+import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystem;
@@ -109,9 +110,12 @@
                 {
                     // eaten, handled by repo system
                 }
-                else
+                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
-                    // request.addMetadata( new MetadataBridge( metadata ) );
+                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata = 
+                                    (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
+                    
+                    request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
                 }
             }
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
index 013568c..260beec 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
@@ -29,6 +29,7 @@
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
 import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -89,9 +90,12 @@
                 {
                     // eaten, handled by repo system
                 }
-                else
+                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
-                    // request.addMetadata( new MetadataBridge( metadata ) );
+                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
+                                    ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
+                    
+                    request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
                 }
             }
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
index 236c0cf..d922b97 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
@@ -29,6 +29,7 @@
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
 import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.maven.shared.transfer.metadata.internal.Maven31MetadataBridge;
 import org.apache.maven.shared.transfer.repository.RepositoryManager;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -89,9 +90,12 @@
                 {
                     // eaten, handled by repo system
                 }
-                else
+                else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
-                    // request.addMetadata( new MetadataBridge( metadata ) );
+                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata = 
+                                    (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
+                    
+                    request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
                 }
             }
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java b/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java
new file mode 100644
index 0000000..e77d6fd
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/metadata/ArtifactMetadata.java
@@ -0,0 +1,33 @@
+package org.apache.maven.shared.transfer.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Original ArtifactMetada with File reference
+ * 
+ * @author Robert Scholte
+ *
+ */
+public interface ArtifactMetadata extends org.apache.maven.repository.legacy.metadata.ArtifactMetadata
+{
+    File getFile();
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java b/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java
new file mode 100644
index 0000000..fde00a8
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven30MetadataBridge.java
@@ -0,0 +1,107 @@
+package org.apache.maven.shared.transfer.metadata.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.sonatype.aether.metadata.Metadata;
+
+/**
+ * A MetadataBridge for Maven 3.0
+ * 
+ * @author Robert Scholte
+ *
+ */
+public class Maven30MetadataBridge implements Metadata
+{
+    private ArtifactMetadata metadata;
+    
+    private File file;
+
+    public Maven30MetadataBridge( ArtifactMetadata metadata )
+    {
+        this.metadata = metadata;
+    }
+
+    @Override
+    public String getGroupId()
+    {
+        return emptify( metadata.getGroupId() );
+    }
+
+    @Override
+    public String getArtifactId()
+    {
+        return metadata.storedInGroupDirectory() ? "" : emptify( metadata.getArtifactId() );
+    }
+
+    @Override
+    public String getVersion()
+    {
+        return metadata.storedInArtifactVersionDirectory() ? emptify( metadata.getBaseVersion() ) : "";
+    }
+
+    @Override
+    public String getType()
+    {
+        return metadata.getRemoteFilename();
+    }
+
+    private String emptify( String string )
+    {
+        return ( string != null ) ? string : "";
+    }
+
+    @Override
+    public File getFile()
+    {
+        return file;
+    }
+    
+    @Override
+    public Maven30MetadataBridge setFile( File file )
+    {
+        this.file = file;
+        return this;
+    }
+
+    @Override
+    public Nature getNature()
+    {
+        if ( metadata instanceof RepositoryMetadata )
+        {
+            switch ( ( (RepositoryMetadata) metadata ).getNature() )
+            {
+                case RepositoryMetadata.RELEASE_OR_SNAPSHOT:
+                    return Nature.RELEASE_OR_SNAPSHOT;
+                case RepositoryMetadata.SNAPSHOT:
+                    return Nature.SNAPSHOT;
+                default:
+                    return Nature.RELEASE;
+            }
+        }
+        else
+        {
+            return Nature.RELEASE;
+        }
+    }
+}
diff --git a/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java b/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
new file mode 100644
index 0000000..b33d96e
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/transfer/metadata/internal/Maven31MetadataBridge.java
@@ -0,0 +1,106 @@
+package org.apache.maven.shared.transfer.metadata.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.eclipse.aether.metadata.AbstractMetadata;
+import org.eclipse.aether.metadata.Metadata;
+
+/**
+ * A MetadataBridge for Maven 3.1 
+ * @author Robert Scholte
+ */
+public class Maven31MetadataBridge extends AbstractMetadata implements Metadata
+{
+    private ArtifactMetadata metadata;
+    
+    private File file;
+    
+    public Maven31MetadataBridge( ArtifactMetadata metadata )
+    {
+        this.metadata = metadata;
+    }
+
+    @Override
+    public String getGroupId()
+    {
+        return emptify( metadata.getGroupId() );
+    }
+
+    @Override
+    public String getArtifactId()
+    {
+        return metadata.storedInGroupDirectory() ? "" : emptify( metadata.getArtifactId() );
+    }
+
+    @Override
+    public String getVersion()
+    {
+        return metadata.storedInArtifactVersionDirectory() ? emptify( metadata.getBaseVersion() ) : "";
+    }
+
+    @Override
+    public String getType()
+    {
+        return metadata.getRemoteFilename();
+    }
+
+    private String emptify( String string )
+    {
+        return ( string != null ) ? string : "";
+    }
+
+    @Override
+    public File getFile()
+    {
+        return file;
+    }
+    
+    @Override
+    public Nature getNature()
+    {
+        if ( metadata instanceof RepositoryMetadata )
+        {
+            switch ( ( (RepositoryMetadata) metadata ).getNature() )
+            {
+                case RepositoryMetadata.RELEASE_OR_SNAPSHOT:
+                    return Nature.RELEASE_OR_SNAPSHOT;
+                case RepositoryMetadata.SNAPSHOT:
+                    return Nature.SNAPSHOT;
+                default:
+                    return Nature.RELEASE;
+            }
+        }
+        else
+        {
+            return Nature.RELEASE;
+        }
+    }
+
+    @Override
+    public Map<String, String> getProperties()
+    {
+        return copyProperties( null );
+    }
+}
