diff --git a/Network/Web/Date.hs b/Network/Web/Date.hs
--- a/Network/Web/Date.hs
+++ b/Network/Web/Date.hs
@@ -1,9 +1,9 @@
 module Network.Web.Date (parseDate, utcToDate, HttpDate) where
 
+import Control.Monad
 import qualified Data.ByteString.Char8 as S
 import Data.Time
-import Locale
-import Control.Monad
+import System.Locale
 
 type HttpDate = S.ByteString
 
diff --git a/Network/Web/Server/Lang.hs b/Network/Web/Server/Lang.hs
--- a/Network/Web/Server/Lang.hs
+++ b/Network/Web/Server/Lang.hs
@@ -1,8 +1,10 @@
 module Network.Web.Server.Lang (parseLang) where
 
+import Control.Applicative hiding (many,optional,(<|>))
 import Data.List
 import Data.Ord
-import Parsec
+import Text.Parsec
+import Text.Parsec.String
 
 parseLang :: String -> [String]
 parseLang xs = case parse acceptLanguage "" xs of
diff --git a/Network/Web/Server/Range.hs b/Network/Web/Server/Range.hs
--- a/Network/Web/Server/Range.hs
+++ b/Network/Web/Server/Range.hs
@@ -1,6 +1,8 @@
 module Network.Web.Server.Range (skipAndSize) where
 
-import Parsec
+import Control.Applicative hiding (many,optional,(<|>))
+import Text.Parsec
+import Text.Parsec.String
 
 skipAndSize :: String -> Integer -> Maybe (Integer,Integer)
 skipAndSize str size = case parseRange str of
diff --git a/Parsec.hs b/Parsec.hs
deleted file mode 100644
--- a/Parsec.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-#ifndef MIN_VERSION_parsec
-#define MIN_VERSION_parsec(x,y,z) 0
-#endif
-
-#if MIN_VERSION_parsec(3,0,0)
-module Parsec (
-      module Control.Applicative
-    , module Text.Parsec
-    , module Text.Parsec.String
-    ) where
-
-import Control.Applicative hiding (many,optional,(<|>))
-import Text.Parsec
-import Text.Parsec.String
-#else
-module Parsec (
-      module Text.ParserCombinators.Parsec
-    , (<$>), (<$), (<*>), (<*), (*>), pure
-    ) where
-
-import Control.Monad (ap, liftM)
-import Text.ParserCombinators.Parsec
-
-{-
-  GenParser cannot be an instance of Applicative and Alternative
-  due to the overlapping instances error, sigh!
--}
-
-(<$>) :: Monad m => (a -> b) -> m a -> m b
-(<$>) = liftM
-
-(<$) :: Monad m => a -> m b -> m a
-a <$ m = m >> return a
-
-(<*>) :: Monad m => m (a -> b) -> m a -> m b
-(<*>) = ap
-
-(*>) :: Monad m => m a -> m b -> m b
-(*>) = (>>)
-
-(<*) :: Monad m => m a -> m b -> m a
-m1 <* m2 = do x <- m1
-              m2
-              return x
-
-pure :: Monad m => a -> m a
-pure = return
-
-infixl 4 <$>, <$, <*>, <*, *>
-#endif
diff --git a/webserver.cabal b/webserver.cabal
--- a/webserver.cabal
+++ b/webserver.cabal
@@ -1,5 +1,5 @@
 Name:                   webserver
-Version:                0.4.4
+Version:                0.4.5
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -11,22 +11,21 @@
 Build-Type:             Simple
 library
   if impl(ghc >= 6.12)
-    GHC-Options:        -Wall -O2 -fno-warn-unused-do-bind
+    GHC-Options:        -Wall -fno-warn-unused-do-bind
   else
-    GHC-Options:        -Wall -O2
+    GHC-Options:        -Wall
   Exposed-Modules:      Network.Web.HTTP
                         Network.Web.Server
                         Network.Web.Server.Basic
                         Network.Web.URI
-  Other-Modules:        Parsec
-                        Network.Web.Date
+  Other-Modules:        Network.Web.Date
                         Network.Web.Params
                         Network.Web.Server.CGI
                         Network.Web.Server.Lang
                         Network.Web.Server.Params
                         Network.Web.Server.Range
-  Build-Depends:        base >= 4 && < 5, parsec,
-                        haskell98, network, bytestring, containers,
+  Build-Depends:        base >= 4 && < 5, parsec >= 3,
+                        network, bytestring, containers, old-locale,
                         filepath, time, unix, process, c10k
 Source-Repository head
   Type:                 git
