diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
index 018de20..fb93dcb 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeNode.java
@@ -37,6 +37,13 @@
         this.artifact = artifact;
     }
     
+    /**
+     * Note: an artifact doesn't contain exclusion information, so it won't be available here.
+     * When required switch to filtering based on Aether
+     * 
+     * @see EclipseAetherNode
+     * @see SonatypeAetherNode
+     */
     @Override
     public Dependency getDependency()
     {
@@ -48,7 +55,8 @@
         mavenDependency.setType( artifact.getType() );
         mavenDependency.setScope( artifact.getScope() );
         mavenDependency.setOptional( artifact.isOptional() );
-
+        // no setExcludes possible
+        
         return mavenDependency;
     }
 
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
index 5e82737..448c218 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
@@ -19,10 +19,14 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.eclipse.aether.artifact.ArtifactProperties;
 import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.Exclusion;
 
 /**
  * Adapter of an Eclipse Aether DependencyNode for common Node 
@@ -62,6 +66,24 @@
         {
             mavenDependency.setOptional( nodeDependency.isOptional() );
         }
+        if ( nodeDependency.getExclusions() != null )
+        {
+            List<org.apache.maven.model.Exclusion> mavenExclusions =
+                new ArrayList<org.apache.maven.model.Exclusion>( nodeDependency.getExclusions().size() );
+
+            for ( Exclusion aetherExclusion : nodeDependency.getExclusions() )
+            {
+                org.apache.maven.model.Exclusion mavenExclusion = new org.apache.maven.model.Exclusion();
+
+                mavenExclusion.setGroupId( aetherExclusion.getGroupId() );
+                mavenExclusion.setArtifactId( aetherExclusion.getArtifactId() );
+                // that's all folks, although Aether has more metadata
+
+                mavenExclusions.add( mavenExclusion );
+            }
+
+            mavenDependency.setExclusions( mavenExclusions );
+        }
 
         return mavenDependency;
     }
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
index 484b725..668d2fc 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
@@ -19,9 +19,13 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.Exclusion;
 import org.sonatype.aether.util.artifact.ArtifactProperties;
 
 /**
@@ -59,6 +63,24 @@
         mavenDependency.setType( nodeDependency.getArtifact().getProperty( ArtifactProperties.TYPE, null ) );
         mavenDependency.setScope( nodeDependency.getScope() );
         mavenDependency.setOptional( nodeDependency.isOptional() );
+        if ( nodeDependency.getExclusions() != null )
+        {
+            List<org.apache.maven.model.Exclusion> mavenExclusions =
+                new ArrayList<org.apache.maven.model.Exclusion>( nodeDependency.getExclusions().size() );
+
+            for ( Exclusion aetherExclusion : nodeDependency.getExclusions() )
+            {
+                org.apache.maven.model.Exclusion mavenExclusion = new org.apache.maven.model.Exclusion();
+
+                mavenExclusion.setGroupId( aetherExclusion.getGroupId() );
+                mavenExclusion.setArtifactId( aetherExclusion.getArtifactId() );
+                // that's all folks, although Aether has more metadata
+
+                mavenExclusions.add( mavenExclusion );
+            }
+
+            mavenDependency.setExclusions( mavenExclusions );
+        }
 
         return mavenDependency;
     }
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
index 0edb4f6..8809beb 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNodeTest.java
@@ -21,11 +21,16 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
 import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.eclipse.aether.artifact.DefaultArtifact;
 import org.eclipse.aether.graph.DefaultDependencyNode;
 import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.Exclusion;
 import org.junit.Test;
 
 public class EclipseAetherNodeTest
@@ -78,7 +83,7 @@
     @Test
     public void testOptional()
     {
-        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, null ) );
+        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, (Boolean) null ) );
         
         assertEquals( null, node.getDependency().getOptional()  );
         assertEquals( false, node.getDependency().isOptional()  );
@@ -91,6 +96,17 @@
         assertEquals( "false", node.getDependency().getOptional()  );
         assertEquals( false, node.getDependency().isOptional()  );
     }
+    
+    @Test
+    public void testExclusions()
+    {
+        Node node = new EclipseAetherNode( newDependencyNode( "g:a:v", null, Collections.singletonList( "eg:ea" ) ) );
+        assertEquals( 1, node.getDependency().getExclusions().size() );
+        
+        org.apache.maven.model.Exclusion mavenExclusion = node.getDependency().getExclusions().get( 0 );
+        assertEquals( "eg", mavenExclusion.getGroupId() );
+        assertEquals( "ea", mavenExclusion.getArtifactId() );
+    }
 
     private DependencyNode newDependencyNode( String coor, String scope )
     {
@@ -102,4 +118,19 @@
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( coor ), scope, optional ) );
     }
 
+    private DependencyNode newDependencyNode( String coor, String scope, Collection<String> exclusions )
+    {
+        Dependency dependency = new Dependency( new DefaultArtifact( coor ), scope );
+        
+        Collection<Exclusion> aetherExclusions = new ArrayList<Exclusion>( exclusions.size() );
+        for ( String exclusion : exclusions )
+        {
+            String[] ga = exclusion.split( ":" );
+            aetherExclusions.add( new Exclusion( ga[0], ga[1], null, null ) );
+        }
+        dependency = dependency.setExclusions( aetherExclusions );
+        
+        return new DefaultDependencyNode( dependency );
+    }
+
 }
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
index 37a1a4e..9a26595 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNodeTest.java
@@ -21,10 +21,15 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
 import org.apache.maven.shared.artifact.filter.resolve.Node;
 import org.junit.Test;
 import org.sonatype.aether.graph.Dependency;
 import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.Exclusion;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 import org.sonatype.aether.util.graph.DefaultDependencyNode;
 
@@ -92,6 +97,17 @@
         assertEquals( false, node.getDependency().isOptional()  );
     }
 
+    @Test
+    public void testExclusions()
+    {
+        Node node = new SonatypeAetherNode( newDependencyNode( "g:a:v", null, Collections.singletonList( "eg:ea" ) ) );
+        assertEquals( 1, node.getDependency().getExclusions().size() );
+        
+        org.apache.maven.model.Exclusion mavenExclusion = node.getDependency().getExclusions().get( 0 );
+        assertEquals( "eg", mavenExclusion.getGroupId() );
+        assertEquals( "ea", mavenExclusion.getArtifactId() );
+    }
+
     private DependencyNode newDependencyNode( String string, String scope )
     {
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( string ), scope ) );
@@ -102,4 +118,18 @@
         return new DefaultDependencyNode( new Dependency( new DefaultArtifact( coor ), scope, optional ) );
     }
 
+    private DependencyNode newDependencyNode( String coor, String scope, Collection<String> exclusions )
+    {
+        Dependency dependency = new Dependency( new DefaultArtifact( coor ), scope );
+        
+        Collection<Exclusion> aetherExclusions = new ArrayList<Exclusion>( exclusions.size() );
+        for ( String exclusion : exclusions )
+        {
+            String[] ga = exclusion.split( ":" );
+            aetherExclusions.add( new Exclusion( ga[0], ga[1], null, null ) );
+        }
+        dependency = dependency.setExclusions( aetherExclusions );
+        
+        return new DefaultDependencyNode( dependency );
+    }
 }
