diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
index 4307f1d..ad2377a 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
@@ -169,10 +169,10 @@
 
     private boolean matchAgainst( final String value, final List<String> patterns, final boolean regionMatch )
     {
+        final String[] tokens = value.split( ":" );
         for ( String pattern : patterns )
         {
             final String[] patternTokens = pattern.split( ":" );
-            final String[] tokens = value.split( ":" );
 
             // fail immediately if pattern tokens outnumber tokens to match
             boolean matched = ( patternTokens.length <= tokens.length );
@@ -182,14 +182,15 @@
                 matched = matches( tokens[i], patternTokens[i] );
             }
 
-            // // case of starting '*' like '*:jar:*'
-            if ( !matched && patternTokens.length < tokens.length && patternTokens.length > 0
-                && "*".equals( patternTokens[0] ) )
+            // case of starting '*' like '*:jar:*'
+            // This really only matches from the end instead.....
+            if ( !matched && patternTokens.length < tokens.length && isFirstPatternWildcard( patternTokens ) )
             {
                 matched = true;
+                int tokenOffset = tokens.length - patternTokens.length;
                 for ( int i = 0; matched && i < patternTokens.length; i++ )
                 {
-                    matched = matches( tokens[i + ( tokens.length - patternTokens.length )], patternTokens[i] );
+                    matched = matches( tokens[i + tokenOffset], patternTokens[i] );
                 }
             }
 
@@ -210,6 +211,11 @@
 
     }
 
+    private boolean isFirstPatternWildcard( String[] patternTokens )
+    {
+        return patternTokens.length > 0 && "*".equals( patternTokens[0] );
+    }
+
     /**
      * Gets whether the specified token matches the specified pattern segment.
      * 
