diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
index d0a0cb8..dc04a24 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformer.java
@@ -52,11 +52,13 @@
     
     private boolean includeNullScope = true;
     
+    private boolean actTransitivelyPattern = false; 
+    
     /**
      * Used by {@link #transform(ScopeFilter)}
      * 
      * When filtering on artifacts it is possible that the scope is unknown.
-     * Decide if artifact should be included is its scoop is {@code null}, default is {@code true}
+     * Decide if artifact should be included if its scope is {@code null}, default is {@code true}
      * 
      * @param includeNullScope set to {@code false} if {@code null}-scoped Artifacts should not be included
      */
@@ -64,6 +66,21 @@
     {
         this.includeNullScope = includeNullScope;
     }
+    
+    /**
+     * Used by {@link #transform(PatternExclusionsFilter)} and {@link #transform(PatternInclusionsFilter)} Determines
+     * whether the include/exclude patterns will be applied to the transitive path of a given artifact. If {@code true},
+     * and the current artifact is a transitive dependency brought in by another artifact which matches an inclusion or
+     * exclusion pattern, then the current artifact has the same inclusion/exclusion logic applied to it as well.
+     * Default is {@code false}
+     * 
+     * @param actTransitivelyPattern set to {@code true} if this artifact should be included/excluded just like one of
+     *            its ancestors.
+     */
+    public void setActTransitivelyPattern( boolean actTransitivelyPattern )
+    {
+        this.actTransitivelyPattern = actTransitivelyPattern;
+    }
 
     @Override
     public ArtifactFilter transform( final ScopeFilter scopeFilter )
@@ -154,13 +171,13 @@
     @Override
     public ArtifactFilter transform( PatternExclusionsFilter patternExclusionsFilter )
     {
-        return new PatternExcludesArtifactFilter( patternExclusionsFilter.getExcludes() );
+        return new PatternExcludesArtifactFilter( patternExclusionsFilter.getExcludes(), actTransitivelyPattern );
     }
 
     @Override
     public ArtifactFilter transform( PatternInclusionsFilter patternInclusionsFilter )
     {
-        return new PatternIncludesArtifactFilter( patternInclusionsFilter.getIncludes() );
+        return new PatternIncludesArtifactFilter( patternInclusionsFilter.getIncludes(), actTransitivelyPattern );
     }
 
     @Override
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
index 1efb98d..99074de 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/resolve/transform/ArtifactIncludeFilterTransformerTest.java
@@ -152,6 +152,31 @@
     }
 
     @Test
+    public void testTransformPatternExclusionsFilterActTransitivily()
+        throws Exception
+    {
+        PatternExclusionsFilter filter = new PatternExclusionsFilter( Collections.singletonList( "x:*" ) );
+        
+        transformer.setActTransitivelyPattern( true );
+
+        Artifact parentArtifact = newArtifact( "x:a:v", null );
+        
+        Artifact artifact = newArtifact( "g:a:v", null );
+        
+        artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
+
+        PatternExcludesArtifactFilter dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
+        
+        assertFalse( dependencyFilter.include( artifact ) );
+        
+        transformer.setActTransitivelyPattern( false );
+        
+        dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
+
+        assertTrue( dependencyFilter.include( artifact ) );
+    }
+
+    @Test
     public void testTransformPatternInclusionsFilter()
         throws Exception
     {
@@ -165,6 +190,31 @@
     }
     
     @Test
+    public void testTransformPatternInclusionsFilterActTransitivily()
+        throws Exception
+    {
+        PatternInclusionsFilter filter = new PatternInclusionsFilter( Collections.singletonList( "x:*" ) );
+
+        transformer.setActTransitivelyPattern( true );
+        
+        Artifact parentArtifact = newArtifact( "x:a:v", null );
+        
+        Artifact artifact = newArtifact( "g:a:v", null );
+        
+        artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
+        
+        PatternIncludesArtifactFilter dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
+
+        assertTrue( dependencyFilter.include( artifact ) );
+        
+        transformer.setActTransitivelyPattern( false );
+        
+        dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
+
+        assertFalse( dependencyFilter.include( artifact ) );
+    }
+    
+    @Test
     public void testTransformAbstractFilter() throws Exception
     {
         AbstractFilter snapshotFilter = new AbstractFilter()
