diff --git a/hakyll.cabal b/hakyll.cabal
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -1,5 +1,5 @@
 Name:    hakyll
-Version: 4.2.0.0
+Version: 4.2.1.0
 
 Synopsis: A static website compiler library
 Description:
diff --git a/src/Hakyll/Core/File.hs b/src/Hakyll/Core/File.hs
--- a/src/Hakyll/Core/File.hs
+++ b/src/Hakyll/Core/File.hs
@@ -24,8 +24,8 @@
 import           Hakyll.Core.Compiler
 import           Hakyll.Core.Compiler.Internal
 import           Hakyll.Core.Configuration
-import           Hakyll.Core.Identifier
 import           Hakyll.Core.Item
+import           Hakyll.Core.Provider
 import qualified Hakyll.Core.Store             as Store
 import           Hakyll.Core.Util.File
 import           Hakyll.Core.Writable
@@ -33,24 +33,21 @@
 
 --------------------------------------------------------------------------------
 -- | This will copy any file directly by using a system call
-data CopyFile = CopyFile
-    deriving (Show, Eq, Ord, Typeable)
-
-
---------------------------------------------------------------------------------
-instance Binary CopyFile where
-    put CopyFile = return ()
-    get          = return CopyFile
+newtype CopyFile = CopyFile FilePath
+    deriving (Binary, Eq, Ord, Show, Typeable)
 
 
 --------------------------------------------------------------------------------
 instance Writable CopyFile where
-    write dst item = copyFile (toFilePath $ itemIdentifier item) dst
+    write dst (Item _ (CopyFile src)) = copyFile src dst
 
 
 --------------------------------------------------------------------------------
 copyFileCompiler :: Compiler (Item CopyFile)
-copyFileCompiler = makeItem CopyFile
+copyFileCompiler = do
+    identifier <- getUnderlying
+    provider   <- compilerProvider <$> compilerAsk
+    makeItem $ CopyFile $ resourceFilePath provider identifier
 
 
 --------------------------------------------------------------------------------
diff --git a/src/Hakyll/Core/Provider.hs b/src/Hakyll/Core/Provider.hs
--- a/src/Hakyll/Core/Provider.hs
+++ b/src/Hakyll/Core/Provider.hs
@@ -9,6 +9,7 @@
       -- * Querying resource properties
     , Internal.resourceList
     , Internal.resourceExists
+    , Internal.resourceFilePath
     , Internal.resourceModified
     , Internal.resourceModificationTime
 
diff --git a/tests/Hakyll/Core/Runtime/Tests.hs b/tests/Hakyll/Core/Runtime/Tests.hs
--- a/tests/Hakyll/Core/Runtime/Tests.hs
+++ b/tests/Hakyll/Core/Runtime/Tests.hs
@@ -6,6 +6,7 @@
 
 
 --------------------------------------------------------------------------------
+import qualified Data.ByteString     as B
 import           System.FilePath     ((</>))
 import           Test.Framework      (Test, testGroup)
 import           Test.HUnit          (Assertion, (@?=))
@@ -28,6 +29,10 @@
 case01 :: Assertion
 case01 = do
     _ <- run testConfiguration Logger.Error $ do
+        match "images/*" $ do
+            route idRoute
+            compile copyFileCompiler
+
         match "*.md" $ do
             route   $ setExtension "html"
             compile $ do
@@ -40,6 +45,12 @@
             compile $ do
                 items <- loadAllSnapshots "*.md" "raw"
                 makeItem $ concat $ map itemBody (items :: [Item String])
+
+    favicon <- B.readFile $
+        providerDirectory testConfiguration </> "images/favicon.ico"
+    favicon' <- B.readFile $
+        destinationDirectory testConfiguration </> "images/favicon.ico"
+    favicon @?= favicon'
 
     example <- readFile $
         destinationDirectory testConfiguration </> "example.html"
