diff --git a/hack2-contrib.cabal b/hack2-contrib.cabal
--- a/hack2-contrib.cabal
+++ b/hack2-contrib.cabal
@@ -1,5 +1,5 @@
 Name:                 hack2-contrib
-Version:              2011.6.20
+Version:              2011.6.21
 Build-type:           Simple
 Synopsis:             Hack2 contrib
 Description:          Common middlewares and utilities that helps working with Hack2
diff --git a/src/Hack2/Contrib/Middleware/File.hs b/src/Hack2/Contrib/Middleware/File.hs
--- a/src/Hack2/Contrib/Middleware/File.hs
+++ b/src/Hack2/Contrib/Middleware/File.hs
@@ -22,7 +22,9 @@
 import qualified Data.ByteString.Char8 as B
 import qualified Data.ByteString.Lazy.Char8 as Lazy
 import Data.ByteString.Char8 (ByteString)
+import Data.Enumerator.Binary (enumFile)
 
+
 file :: Maybe ByteString -> Middleware
 file root _ = \env -> do
   let path = env.path_info .as_string unescape_uri
@@ -51,7 +53,7 @@
     
     where 
       serving path = do
-        content <- path.Lazy.readFile
+        let file_enumerator = enumFile path
         size <- path.b2u.file_size ^ from_i
         mtime_str <- path.b2u.file_mtime ^ httpdate
         
@@ -61,7 +63,7 @@
         
         return - 
           def 
-            .set_body_bytestring content
+            .set_body (HackEnumerator file_enumerator)
             .set_content_length size
             .set_content_type content_type
             .set_last_modified (B.pack mtime_str)
