diff --git a/Network/Wai/Application/Classic.hs b/Network/Wai/Application/Classic.hs
--- a/Network/Wai/Application/Classic.hs
+++ b/Network/Wai/Application/Classic.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 {-|
   WAI (Web Application Interface) Application for static files and CGI.
 -}
@@ -21,10 +23,12 @@
   , defaultCgiAppSpec
   , CgiRoute(..)
   , cgiApp
+#ifdef REV_PROXY
   -- * Reverse Proxy
   , RevProxyAppSpec(..)
   , RevProxyRoute(..)
   , revProxyApp
+#endif
   -- * Path
   , module Network.Wai.Application.Classic.Path
   -- * Misc
@@ -35,6 +39,8 @@
 import Network.Wai.Application.Classic.File
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Application.Classic.Redirect
-import Network.Wai.Application.Classic.RevProxy
 import Network.Wai.Application.Classic.Types
 import Network.Wai.Application.Classic.Def
+#ifdef REV_PROXY
+import Network.Wai.Application.Classic.RevProxy
+#endif
diff --git a/Network/Wai/Application/Classic/CGI.hs b/Network/Wai/Application/Classic/CGI.hs
--- a/Network/Wai/Application/Classic/CGI.hs
+++ b/Network/Wai/Application/Classic/CGI.hs
@@ -5,7 +5,7 @@
   ) where
 
 import Control.Exception (SomeException, IOException, try)
-import Control.Exception.Lifted (catch)
+import Control.Exception.Lifted as L (catch)
 import Control.Monad (when)
 import Control.Monad.IO.Class (liftIO)
 import Control.Monad.Trans.Resource
@@ -23,7 +23,6 @@
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Application.Classic.Types
 import Network.Wai.Logger.Utils
-import Prelude hiding (catch)
 import System.Environment
 import System.IO
 import System.Process
@@ -74,7 +73,7 @@
 
 fromCGI :: Handle -> ClassicAppSpec -> Application
 fromCGI rhdl cspec req = do
-    (src', hs) <- cgiHeader `catch` recover
+    (src', hs) <- cgiHeader `L.catch` recover
     let (st, hdr, hasBody) = case check hs of
             Nothing    -> (internalServerError500,[],False)
             Just (s,h) -> (s,h,True)
diff --git a/Network/Wai/Application/Classic/EventSource.hs b/Network/Wai/Application/Classic/EventSource.hs
--- a/Network/Wai/Application/Classic/EventSource.hs
+++ b/Network/Wai/Application/Classic/EventSource.hs
@@ -1,11 +1,13 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Network.Wai.Application.Classic.EventSource (
-  toResponseEventSource
-) where
+    toResponseEventSource
+  ) where
 
 import Blaze.ByteString.Builder
 import Data.ByteString (ByteString)
 import qualified Data.ByteString as BS
+import Data.ByteString.Char8 ()
 import Data.Conduit
 import qualified Data.Conduit.List as CL
 
diff --git a/Network/Wai/Application/Classic/File.hs b/Network/Wai/Application/Classic/File.hs
--- a/Network/Wai/Application/Classic/File.hs
+++ b/Network/Wai/Application/Classic/File.hs
@@ -19,7 +19,6 @@
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Application.Classic.Status
 import Network.Wai.Application.Classic.Types
-import Prelude hiding (catch)
 
 ----------------------------------------------------------------
 
diff --git a/Network/Wai/Application/Classic/RevProxy.hs b/Network/Wai/Application/Classic/RevProxy.hs
--- a/Network/Wai/Application/Classic/RevProxy.hs
+++ b/Network/Wai/Application/Classic/RevProxy.hs
@@ -4,7 +4,7 @@
 
 import Control.Applicative
 import Control.Exception (SomeException)
-import Control.Exception.Lifted (catch)
+import Control.Exception.Lifted as L (catch)
 import Control.Monad.IO.Class (liftIO)
 import qualified Data.ByteString.Char8 as BS hiding (uncons)
 import qualified Data.ByteString as BS (uncons)
@@ -21,7 +21,6 @@
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Application.Classic.Types
 import Blaze.ByteString.Builder (Builder)
-import Prelude hiding (catch)
 
 toHTTPRequest :: Request -> RevProxyRoute -> Int64 -> H.Request (ResourceT IO)
 toHTTPRequest req route len = H.def {
@@ -67,7 +66,7 @@
 revProxyApp :: ClassicAppSpec -> RevProxyAppSpec -> RevProxyRoute -> Application
 revProxyApp cspec spec route req =
     revProxyApp' cspec spec route req
-    `catch` badGateway cspec req
+    `L.catch` badGateway cspec req
 
 revProxyApp' :: ClassicAppSpec -> RevProxyAppSpec -> RevProxyRoute -> Application
 revProxyApp' cspec spec route req = do
diff --git a/Network/Wai/Application/Classic/Status.hs b/Network/Wai/Application/Classic/Status.hs
--- a/Network/Wai/Application/Classic/Status.hs
+++ b/Network/Wai/Application/Classic/Status.hs
@@ -8,12 +8,10 @@
 import Control.Exception.IOChoice
 import qualified Data.ByteString.Lazy as BL
 import Data.ByteString.Lazy.Char8 ()
-import Data.Maybe
 import qualified Data.StaticHash as M
 import Network.HTTP.Types
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Application.Classic.Types
-import Prelude hiding (catch)
 
 ----------------------------------------------------------------
 
diff --git a/Network/Wai/Application/Classic/Types.hs b/Network/Wai/Application/Classic/Types.hs
--- a/Network/Wai/Application/Classic/Types.hs
+++ b/Network/Wai/Application/Classic/Types.hs
@@ -1,13 +1,17 @@
+{-# LANGUAGE CPP #-}
+
 module Network.Wai.Application.Classic.Types where
 
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy as BL (ByteString)
-import qualified Network.HTTP.Conduit as H
 import Network.HTTP.Date
 import Network.HTTP.Types
 import Network.Wai.Application.Classic.Path
 import Network.Wai.Logger
 import System.Log.FastLogger
+#ifdef REV_PROXY
+import qualified Network.HTTP.Conduit as H
+#endif
 
 ----------------------------------------------------------------
 
@@ -81,6 +85,7 @@
 
 ----------------------------------------------------------------
 
+#ifdef REV_PROXY
 data RevProxyAppSpec = RevProxyAppSpec {
     -- | Connection manager
     revProxyManager :: H.Manager
@@ -96,6 +101,7 @@
     -- | Destination port number.
   , revProxyPort :: Int
   } deriving (Eq,Show)
+#endif
 
 ----------------------------------------------------------------
 
diff --git a/test/ClassicSpec.hs b/test/ClassicSpec.hs
--- a/test/ClassicSpec.hs
+++ b/test/ClassicSpec.hs
@@ -3,11 +3,9 @@
 module ClassicSpec where
 
 import Control.Applicative
-import qualified Data.ByteString.Lazy.Char8 as BL
-import Data.Conduit
-import Network.HTTP.Conduit
-import qualified Network.HTTP.Types as H
-import Prelude hiding (catch)
+import Network.HTTP
+import Network.Stream
+import System.IO
 import Test.Hspec
 
 spec :: Spec
@@ -15,95 +13,92 @@
     describe "cgiApp" $ do
         it "accepts POST" $ do
             let url = "http://127.0.0.1:2345/cgi-bin/echo-env/pathinfo?query=foo"
-            bdy <- responseBody <$> sendPOST url "foo bar.\nbaz!\n"
-            ans <- BL.readFile "test/data/post"
+            bdy <- rspBody <$> sendPOST url "foo bar.\nbaz!\n"
+            ans <- readFileAscii "test/data/post"
             bdy `shouldBe` ans
         it "causes 500 if the CGI script does not exist" $ do
             let url = "http://127.0.0.1:2345/cgi-bin/broken"
-            sc <- responseStatus <$> sendPOST url "foo bar.\nbaz!\n"
-            sc `shouldBe` H.internalServerError500
-
+            sc <- rspCode <$> sendPOST url "foo bar.\nbaz!\n"
+            sc `shouldBe` (5,0,0)
     describe "fileApp" $ do
         it "returns index.html for /" $ do
             let url = "http://127.0.0.1:2345/"
-            rsp <- simpleHttp url
-            ans <- BL.readFile "test/html/index.html"
-            rsp `shouldBe` ans
+            bdy <- rspBody <$> sendGET url
+            ans <- readFileAscii "test/html/index.html"
+            bdy `shouldBe` ans
         it "returns 400 if not exist" $ do
             let url = "http://127.0.0.1:2345/dummy"
-            req <- parseUrl url
-            sc <- responseStatus <$> safeHttpLbs req
-            sc `shouldBe` H.notFound404
+            sc <- rspCode <$> sendGET url
+            sc `shouldBe` (4,0,4)
         it "returns Japanese HTML if language is specified" $ do
             let url = "http://127.0.0.1:2345/ja/"
-            bdy <- responseBody <$> sendGET url [("Accept-Language", "ja, en;q=0.7")]
-            ans <- BL.readFile "test/html/ja/index.html.ja"
+            bdy <- rspBody <$> sendGETwH url [Header HdrAcceptLanguage "ja, en;q=0.7"]
+            ans <- readFileAscii "test/html/ja/index.html.ja"
             bdy `shouldBe` ans
         it "returns 304 if not changed" $ do
             let url = "http://127.0.0.1:2345/"
-            hdr <- responseHeaders <$> sendGET url []
-            let Just lm = lookup "Last-Modified" hdr
-            sc <- responseStatus <$> sendGET url [("If-Modified-Since", lm)]
-            sc `shouldBe` H.notModified304
+            hdr <- rspHeaders <$> sendGET url
+            let Just lm = lookupHeader HdrLastModified hdr
+            sc <- rspCode <$> sendGETwH url [Header HdrIfModifiedSince lm]
+            sc `shouldBe` (3,0,4)
         it "can handle partial request" $ do
             let url = "http://127.0.0.1:2345/"
                 ans = "html>\n<html"
-            bdy <- responseBody <$> sendGET url [("Range", "bytes=10-20")]
+            bdy <- rspBody <$> sendGETwH url [Header HdrRange "bytes=10-20"]
             bdy `shouldBe` ans
         it "can handle HEAD" $ do
             let url = "http://127.0.0.1:2345/"
-            sc <- responseStatus <$> sendHEAD url []
-            sc `shouldBe` H.ok200
+            sc <- rspCode <$> sendHEAD url
+            sc `shouldBe` (2,0,0)
         it "returns 404 for HEAD if not exist" $ do
             let url = "http://127.0.0.1:2345/dummy"
-            sc <- responseStatus <$> sendHEAD url []
-            sc `shouldBe` H.notFound404
+            sc <- rspCode <$> sendHEAD url
+            sc `shouldBe` (4,0,4)
         it "can handle HEAD even if language is specified" $ do
             let url = "http://127.0.0.1:2345/ja/"
-            sc <- responseStatus <$> sendHEAD url [("Accept-Language", "ja, en;q=0.7")]
-            sc `shouldBe` H.ok200
+            sc <- rspCode <$> sendHEADwH url [Header HdrAcceptLanguage "ja, en;q=0.7"]
+            sc `shouldBe` (2,0,0)
         it "returns 304 for HEAD if not modified" $ do
             let url = "http://127.0.0.1:2345/"
-            hdr <- responseHeaders <$> sendHEAD url []
-            let Just lm = lookup "Last-Modified" hdr
-            sc <- responseStatus <$> sendHEAD url [("If-Modified-Since", lm)]
-            sc `shouldBe` H.notModified304
+            hdr <- rspHeaders <$> sendHEAD url
+            let Just lm = lookupHeader HdrLastModified hdr
+            sc <- rspCode <$> sendHEADwH url [Header HdrIfModifiedSince lm]
+            sc `shouldBe` (3,0,4)
         it "redirects to dir/ if trailing slash is missing" $ do
             let url = "http://127.0.0.1:2345/redirect"
-            rsp <- simpleHttp url
-            ans <- BL.readFile "test/html/redirect/index.html"
-            rsp `shouldBe` ans
-
+            rsp <- sendGET url
+            let sc = rspCode rsp
+                hdr = rspHeaders rsp
+                Just lm = lookupHeader HdrLocation hdr
+            sc `shouldBe` (3,0,1)
+            lm `shouldBe` "http://127.0.0.1:2345/redirect/"
 
 ----------------------------------------------------------------
 
-sendGET ::String -> H.RequestHeaders -> IO (Response BL.ByteString)
-sendGET url hdr = do
-    req' <- parseUrl url
-    let req = req' { requestHeaders = hdr }
-    safeHttpLbs req
+sendGET :: String -> IO (Response String)
+sendGET url = sendGETwH url []
 
-sendHEAD :: String -> H.RequestHeaders -> IO (Response BL.ByteString)
-sendHEAD url hdr = do
-    req' <- parseUrl url
-    let req = req' {
-            requestHeaders = hdr
-          , method = "HEAD"
-          }
-    safeHttpLbs req
+sendGETwH :: String -> [Header] -> IO (Response String)
+sendGETwH url hdr = unResult $ simpleHTTP $ (getRequest url) { rqHeaders = hdr }
 
-sendPOST :: String -> BL.ByteString -> IO (Response BL.ByteString)
-sendPOST url body = do
-    req' <- parseUrl url
-    let req = req' {
-            method = "POST"
-          , requestBody = RequestBodyLBS body
-          }
-    safeHttpLbs req
+sendHEAD :: String -> IO (Response String)
+sendHEAD url = sendHEADwH url []
 
-----------------------------------------------------------------
+sendHEADwH :: String -> [Header] -> IO (Response String)
+sendHEADwH url hdr = unResult $ simpleHTTP $ (headRequest url) { rqHeaders = hdr }
 
-safeHttpLbs :: Request (ResourceT IO) -> IO (Response BL.ByteString)
-safeHttpLbs req = withManager $ httpLbs req {
-    checkStatus = \_ _ _  -> Nothing -- prevent throwing an error
-  }
+sendPOST :: String -> String -> IO (Response String)
+sendPOST url body = unResult $ simpleHTTP $ postRequestWithBody url "Text/Plain" body
+
+unResult :: IO (Result (Response String)) -> IO (Response String)
+unResult action = do
+    res <- action
+    case res of
+        Right rsp -> return rsp
+        Left  _   -> error "Connection error"
+
+readFileAscii :: FilePath -> IO String
+readFileAscii name = do
+   h <- openFile name ReadMode
+   hSetEncoding h latin1
+   hGetContents h
diff --git a/wai-app-file-cgi.cabal b/wai-app-file-cgi.cabal
--- a/wai-app-file-cgi.cabal
+++ b/wai-app-file-cgi.cabal
@@ -1,5 +1,5 @@
 Name:                   wai-app-file-cgi
-Version:                0.8.3
+Version:                0.8.4
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -12,9 +12,16 @@
 Cabal-Version:          >= 1.10
 Build-Type:             Simple
 
+Flag rev-proxy
+  Description:          Support reverse proxy wish http-conduit.
+                        This requires unnecessary crypt libraries.
+  Default:              True
+
 Library
   Default-Language:     Haskell2010
   GHC-Options:          -Wall
+  if flag(rev-proxy)
+    Cpp-Options:        -DREV_PROXY
   Exposed-Modules:      Network.Wai.Application.Classic
   Other-Modules:        Network.Wai.Application.Classic.CGI
                         Network.Wai.Application.Classic.Conduit
@@ -28,9 +35,11 @@
                         Network.Wai.Application.Classic.Path
                         Network.Wai.Application.Classic.Range
                         Network.Wai.Application.Classic.Redirect
-                        Network.Wai.Application.Classic.RevProxy
                         Network.Wai.Application.Classic.Status
                         Network.Wai.Application.Classic.Types
+  if flag(rev-proxy)
+    Other-Modules:      Network.Wai.Application.Classic.RevProxy
+
   Build-Depends:        base >= 4 && < 5
                       , attoparsec >= 0.10.0.0
                       , attoparsec-conduit
@@ -44,7 +53,6 @@
                       , directory
                       , fast-logger >= 0.3
                       , filepath
-                      , http-conduit >= 1.9
                       , http-date
                       , http-types >= 0.7
                       , io-choice
@@ -60,6 +68,8 @@
                       , wai >= 1.2
                       , wai-logger
                       , word8
+  if flag(rev-proxy)
+    Build-Depends:      http-conduit >= 1.9
 
 Test-Suite doctest
   Type:                 exitcode-stdio-1.0
@@ -83,12 +93,12 @@
                       , directory
                       , filepath
                       , hspec >= 1.3
-                      , http-conduit
                       , http-types
                       , unix
                       , wai
                       , wai-app-file-cgi
                       , warp
+                      , HTTP
 
 Source-Repository head
   Type:                 git
