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.19
+Version:              2011.6.20
 Build-type:           Simple
 Synopsis:             Hack2 contrib
 Description:          Common middlewares and utilities that helps working with Hack2
@@ -29,7 +29,7 @@
                   , data-default >= 0.2
                   , time
                   , air >= 2011.6.19
-                  , hack2 >= 2011.6.19
+                  , hack2 >= 2011.6.20
                   , utf8-string
                   -- , ansi-wl-pprint
                   , regexpr
diff --git a/src/Hack2/Contrib/Constants.hs b/src/Hack2/Contrib/Constants.hs
--- a/src/Hack2/Contrib/Constants.hs
+++ b/src/Hack2/Contrib/Constants.hs
@@ -6,7 +6,7 @@
 import Air.Light
 import Prelude hiding ((.))
 import Data.Map
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 
 status_with_no_entity_body :: [Int]
 status_with_no_entity_body = [100 .. 199] ++ [204, 304]
diff --git a/src/Hack2/Contrib/Middleware/ContentType.hs b/src/Hack2/Contrib/Middleware/ContentType.hs
--- a/src/Hack2/Contrib/Middleware/ContentType.hs
+++ b/src/Hack2/Contrib/Middleware/ContentType.hs
@@ -8,7 +8,7 @@
 import Hack2.Contrib.Response
 import Air.Light
 import Prelude hiding ((.), (^), (>), (-))
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 
 
 content_type :: ByteString -> Middleware
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
@@ -19,8 +19,9 @@
 import Prelude ()
 import System.Directory
 import System.FilePath
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Lazy.Char8 as Lazy
+import Data.ByteString.Char8 (ByteString)
 
 file :: Maybe ByteString -> Middleware
 file root _ = \env -> do
@@ -50,7 +51,7 @@
     
     where 
       serving path = do
-        content <- path.B.readFile
+        content <- path.Lazy.readFile
         size <- path.b2u.file_size ^ from_i
         mtime_str <- path.b2u.file_mtime ^ httpdate
         
@@ -71,27 +72,27 @@
   def
     .set_status 404
     .set_content_type _TextPlain
-    .set_content_length (msg.B.length)
+    .set_content_length (msg.Lazy.length)
     .set_body_bytestring msg
 
-  where msg = "No permission: " + path + "\n"
+  where msg = "No permission: " + s2l path + "\n"
 
 not_found :: ByteString -> IO Response
 not_found path = return $
   def
     .set_status 404
     .set_content_type _TextPlain
-    .set_content_length (msg.B.length)
+    .set_content_length (msg.Lazy.length)
     .set_body_bytestring msg
   
-  where msg = "File not found: " + path + "\n"
+  where msg = "File not found: " + s2l path + "\n"
 
 forbidden :: IO Response
 forbidden = return - 
   def
     .set_status 403
     .set_content_type _TextPlain
-    .set_content_length (msg.B.length)
+    .set_content_length (msg.Lazy.length)
     .set_body_bytestring msg
 
   where msg = "Forbidden\n"
diff --git a/src/Hack2/Contrib/Middleware/Head.hs b/src/Hack2/Contrib/Middleware/Head.hs
--- a/src/Hack2/Contrib/Middleware/Head.hs
+++ b/src/Hack2/Contrib/Middleware/Head.hs
@@ -6,7 +6,7 @@
 
 import Air.Env hiding (def, head)
 import Prelude ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
 import Data.Default (def)
 
 head :: Middleware
diff --git a/src/Hack2/Contrib/Middleware/RegexpRouter.hs b/src/Hack2/Contrib/Middleware/RegexpRouter.hs
--- a/src/Hack2/Contrib/Middleware/RegexpRouter.hs
+++ b/src/Hack2/Contrib/Middleware/RegexpRouter.hs
@@ -10,7 +10,7 @@
 import List (find)
 import Air
 import Prelude hiding ((.), (^), (>), (-))
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
 
 type RoutePath = (String, Application)
 
diff --git a/src/Hack2/Contrib/Middleware/SimpleAccessLogger.hs b/src/Hack2/Contrib/Middleware/SimpleAccessLogger.hs
--- a/src/Hack2/Contrib/Middleware/SimpleAccessLogger.hs
+++ b/src/Hack2/Contrib/Middleware/SimpleAccessLogger.hs
@@ -12,7 +12,7 @@
 import Air.Env hiding (Default, def)
 import Data.Maybe
 import Prelude ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
 import System.IO
 import Control.Concurrent
 
diff --git a/src/Hack2/Contrib/Middleware/Static.hs b/src/Hack2/Contrib/Middleware/Static.hs
--- a/src/Hack2/Contrib/Middleware/Static.hs
+++ b/src/Hack2/Contrib/Middleware/Static.hs
@@ -15,8 +15,8 @@
 import List (find, isPrefixOf)
 import Air.Light
 import Prelude hiding ((.), (^), (>), (+))
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
+import qualified Data.ByteString.Char8 as B
+import Data.ByteString.Char8 (ByteString)
 
 static :: Maybe ByteString -> [ByteString] -> Middleware
 static root urls app = \env -> do
diff --git a/src/Hack2/Contrib/Middleware/URLMap.hs b/src/Hack2/Contrib/Middleware/URLMap.hs
--- a/src/Hack2/Contrib/Middleware/URLMap.hs
+++ b/src/Hack2/Contrib/Middleware/URLMap.hs
@@ -17,7 +17,7 @@
 import List (find, isPrefixOf)
 import Air.Env hiding (Default, def)
 import Prelude ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
 
 
 type RoutePath = (B.ByteString, Application)
diff --git a/src/Hack2/Contrib/Middleware/UserMime.hs b/src/Hack2/Contrib/Middleware/UserMime.hs
--- a/src/Hack2/Contrib/Middleware/UserMime.hs
+++ b/src/Hack2/Contrib/Middleware/UserMime.hs
@@ -8,8 +8,8 @@
 import Hack2.Contrib.Utils
 import Air.Light
 import Prelude hiding ((.), (-))
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
+import qualified Data.ByteString.Char8 as B
+import Data.ByteString.Char8 (ByteString)
 
 user_mime :: [(ByteString, ByteString)] -> Middleware
 user_mime h app env = do
diff --git a/src/Hack2/Contrib/Middleware/XForwardedForToRemoteHost.hs b/src/Hack2/Contrib/Middleware/XForwardedForToRemoteHost.hs
--- a/src/Hack2/Contrib/Middleware/XForwardedForToRemoteHost.hs
+++ b/src/Hack2/Contrib/Middleware/XForwardedForToRemoteHost.hs
@@ -5,7 +5,7 @@
 import Hack2
 import Air.Env hiding (Default, def)
 import Prelude ()
-import Data.ByteString.Lazy.Char8 ()
+import Data.ByteString.Char8 ()
 
 x_forwarded_for_to_remote_host :: Middleware
 x_forwarded_for_to_remote_host app = \env ->
diff --git a/src/Hack2/Contrib/Mime.hs b/src/Hack2/Contrib/Mime.hs
--- a/src/Hack2/Contrib/Mime.hs
+++ b/src/Hack2/Contrib/Mime.hs
@@ -6,7 +6,7 @@
 import Air.Light
 import Prelude hiding ((.))
 import qualified Data.Map as M
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 
 lookup_mime_type :: ByteString -> Maybe ByteString
 lookup_mime_type = flip M.lookup mime_types
diff --git a/src/Hack2/Contrib/Request.hs b/src/Hack2/Contrib/Request.hs
--- a/src/Hack2/Contrib/Request.hs
+++ b/src/Hack2/Contrib/Request.hs
@@ -3,7 +3,7 @@
 
 module Hack2.Contrib.Request where
 
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 import Data.Maybe
 import Hack2 hiding (body)
 import Hack2.Contrib.Constants
@@ -12,11 +12,12 @@
 import Network.CGI.Cookie
 import Network.CGI.Protocol
 import Prelude ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Lazy.Char8 as Lazy
 import Hack2.Contrib.AirBackports
 
 
-input_bytestring :: Env -> IO ByteString
+input_bytestring :: Env -> IO Lazy.ByteString
 input_bytestring = hack_input > unHackEnumerator > fromEnumerator
 
 scheme :: Env -> ByteString
@@ -80,9 +81,9 @@
       
   where
     to_headers (k, input) = case input.inputFilename of
-      Nothing -> [(k.B.pack, input.inputValue)]
+      Nothing -> [(k.B.pack, input.inputValue.l2s)]
       Just name -> 
-        [  (k.B.pack, input.inputValue)
+        [  (k.B.pack, input.inputValue.l2s)
         ,  ("hack2_input_file_name_" + k.B.pack, name.B.pack)
         ]
 
diff --git a/src/Hack2/Contrib/Response.hs b/src/Hack2/Contrib/Response.hs
--- a/src/Hack2/Contrib/Response.hs
+++ b/src/Hack2/Contrib/Response.hs
@@ -3,20 +3,20 @@
 
 module Hack2.Contrib.Response where
 
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 import Data.Maybe
 import Hack2
 import Hack2.Contrib.Constants
 import Hack2.Contrib.Utils
 import Air.Env hiding (def)
 import Prelude ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Lazy.Char8 as Lazy
 import Hack2.Contrib.AirBackports
 import Data.Default (def)
 import Data.Enumerator (run_, enumList, Enumerator, ($$))
 import qualified Data.ByteString.Char8 as Strict
 
-body_bytestring :: Response -> IO B.ByteString
+body_bytestring :: Response -> IO Lazy.ByteString
 body_bytestring r = r.body.unHackEnumerator.fromEnumerator
 
 redirect :: ByteString -> Maybe Int -> Response -> Response
@@ -53,7 +53,7 @@
 set_body :: HackEnumerator -> Response -> Response
 set_body s r = r { body = s }
 
-set_body_bytestring :: B.ByteString -> Response -> Response
+set_body_bytestring :: Lazy.ByteString -> Response -> Response
 set_body_bytestring b r = 
   let enum = b.toEnumerator :: (forall a. Enumerator Strict.ByteString IO a)
   in
diff --git a/src/Hack2/Contrib/Utils.hs b/src/Hack2/Contrib/Utils.hs
--- a/src/Hack2/Contrib/Utils.hs
+++ b/src/Hack2/Contrib/Utils.hs
@@ -4,7 +4,7 @@
 module Hack2.Contrib.Utils where
 
 import Control.Arrow ((<<<))
-import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.ByteString.Char8 (ByteString)
 import Data.Default
 import Data.List (lookup)
 import Data.Time
@@ -15,7 +15,8 @@
 import Network.URI hiding (path)
 import Prelude ()
 import System.Locale (defaultTimeLocale)
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Lazy.Char8 as Lazy
 import qualified Data.Map as M
 import Hack2.Contrib.AirBackports
 
@@ -26,17 +27,24 @@
 
 import Data.Enumerator (run_, enumList, Enumerator, ($$))
 
-fromEnumerator :: Monad m => Enumerator Strict.ByteString m B.ByteString -> m B.ByteString
+fromEnumerator :: Monad m => Enumerator Strict.ByteString m Lazy.ByteString -> m Lazy.ByteString
 fromEnumerator m = run_ - m $$ EB.consume
 
-toEnumerator :: Monad m => B.ByteString -> Enumerator Strict.ByteString m a
-toEnumerator = enumList 1 < B.toChunks
+toEnumerator :: Monad m => Lazy.ByteString -> Enumerator Strict.ByteString m a
+toEnumerator = enumList 1 < Lazy.toChunks
 
-withEnumerator :: Monad m => (B.ByteString -> B.ByteString) -> Enumerator Strict.ByteString m B.ByteString -> m (Enumerator Strict.ByteString m a)
+withEnumerator :: Monad m => (Lazy.ByteString -> Lazy.ByteString) -> Enumerator Strict.ByteString m Lazy.ByteString -> m (Enumerator Strict.ByteString m a)
 withEnumerator f enum = do
   bytes <- fromEnumerator enum
   return - toEnumerator - f bytes
 
+l2s :: Lazy.ByteString -> Strict.ByteString
+l2s = Strict.concat < Lazy.toChunks
+
+s2l :: Strict.ByteString -> Lazy.ByteString
+s2l = Lazy.fromChunks < return
+
+
 empty_app :: Application
 empty_app = return def
 
@@ -52,8 +60,8 @@
 get :: (Eq a) => a -> [(a, b)] -> Maybe b
 get = lookup
 
-bytesize :: ByteString -> Int
-bytesize = B.length > from_i
+bytesize :: Lazy.ByteString -> Int
+bytesize = Lazy.length > from_i
 
 show_bytestring :: (Show a) => a -> ByteString
 show_bytestring = show > B.pack
