diff --git a/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java b/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
index b19fb21..0801210 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/utils/filters/DestFileFilter.java
@@ -19,10 +19,6 @@
  * under the License.
  */
 
-import java.io.File;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugins.dependency.fromConfiguration.ArtifactItem;
 import org.apache.maven.plugins.dependency.utils.DependencyUtil;
@@ -30,6 +26,12 @@
 import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
 import org.codehaus.plexus.util.StringUtils;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
 /**
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
@@ -266,7 +268,7 @@
     }
 
     @Override
-    public boolean isArtifactIncluded( ArtifactItem item )
+    public boolean isArtifactIncluded( ArtifactItem item ) throws ArtifactFilterException
     {
         Artifact artifact = item.getArtifact();
 
@@ -294,7 +296,28 @@
             destFile = new File( destFolder, item.getDestFileName() );
         }
 
-        return overWrite || !destFile.exists()
-            || ( overWriteIfNewer && artifact.getFile().lastModified() > destFile.lastModified() );
+        return overWrite || !destFile.exists() || ( overWriteIfNewer && getLastModified(
+                artifact.getFile() ) > getLastModified( destFile ) );
+    }
+
+    /**
+     * Using simply {@code File.getLastModified} will return sometimes a wrong value see JDK bug for details.
+     *
+     * https://bugs.openjdk.java.net/browse/JDK-8177809
+     *
+     * @param file {@link File}
+     * @return the last modification time in milliseconds.
+     * @throws ArtifactFilterException in case of a IO Exception.
+     */
+    private long getLastModified( File file ) throws ArtifactFilterException
+    {
+        try
+        {
+            return Files.getLastModifiedTime( file.toPath() ).toMillis();
+        }
+        catch ( IOException e )
+        {
+            throw new ArtifactFilterException( "IO Exception", e );
+        }
     }
 }
diff --git a/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java b/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
index 5a27484..c9ba0eb 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/fromConfiguration/TestUnpackMojo.java
@@ -19,13 +19,6 @@
  * under the License.    
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.versioning.VersionRange;
@@ -39,6 +32,14 @@
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 import org.sonatype.aether.util.DefaultRepositorySystemSession;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
 public class TestUnpackMojo
     extends AbstractDependencyMojoTestCase
 {
@@ -527,6 +528,12 @@
         assertUnpacked( item, true );
     }
 
+    /**
+     * The following code has been modified to prevent the
+     * JDK bug which is described in detail
+     * https://bugs.openjdk.java.net/browse/JDK-8177809
+     *
+     */
     public void testUnpackOverWriteIfNewer()
         throws Exception
     {
@@ -567,16 +574,25 @@
         displayFile( "unpackedFile", unpackedFile );
         displayFile( "artifact    ", artifact.getFile() );
         displayFile( "marker      ", marker );
+
+        long markerLastModifiedMillis = Files.getLastModifiedTime( marker.toPath() ).toMillis();
+        long unpackedFileLastModifiedMillis = Files.getLastModifiedTime( unpackedFile.toPath() ).toMillis();
+
         System.out.println( "marker.lastModified() = " + marker.lastModified() );
         System.out.println( "unpackedFile.lastModified() = " + unpackedFile.lastModified() );
-        assertTrue( "unpackedFile '" + unpackedFile + "' lastModified() == " + marker.lastModified()
-            + ": should be different", marker.lastModified() != unpackedFile.lastModified() );
+        System.out.println( "markerLastModifiedMillis = " + markerLastModifiedMillis );
+        System.out.println( "unpackedFileLastModifiedMillis = " + unpackedFileLastModifiedMillis );
+
+        assertTrue( "unpackedFile '" + unpackedFile + "' lastModified() == " + markerLastModifiedMillis
+                + ": should be different", markerLastModifiedMillis != unpackedFileLastModifiedMillis );
     }
 
-    private void displayFile( String description, File file )
+    private void displayFile( String description, File file ) throws IOException
     {
-        System.out.println( description + ' ' + DateFormatUtils.ISO_DATETIME_FORMAT.format( file.lastModified() ) + ' '
-            + file.getPath().substring( getBasedir().length() ) );
+        long toMillis = Files.getLastModifiedTime( file.toPath() ).toMillis();
+        System.out.println( description + ' ' + DateFormatUtils.ISO_DATETIME_FORMAT.format(
+                file.lastModified() ) + ' ' + toMillis + ' ' + file.getPath().substring(
+                getBasedir().length() ) );
     }
 
     public void assertUnpacked( ArtifactItem item, boolean overWrite )
