diff --git a/Network/Wai/Logger.hs b/Network/Wai/Logger.hs
--- a/Network/Wai/Logger.hs
+++ b/Network/Wai/Logger.hs
@@ -2,7 +2,7 @@
 
 -- | Logging system for WAI applications.
 --
--- High level sample code:
+-- Sample code:
 --
 -- > {-# LANGUAGE OverloadedStrings #-}
 -- > module Main where
@@ -14,51 +14,17 @@
 -- > import Network.Wai
 -- > import Network.Wai.Handler.Warp
 -- > import Network.Wai.Logger
--- > import System.IO
 -- >
 -- > main :: IO ()
 -- > main = do
--- >     logger <- stdoutApacheLoggerInit FromSocket
--- >     run 3000 $ logapp logger
+-- >     aplogger <- stdoutApacheLoggerInit FromSocket True
+-- >     run 3000 $ logapp aplogger
 -- >
 -- > logapp :: ApacheLogger -> Application
--- > logapp logger req = do
--- >     let status = status200
--- >         len = 4
--- >     liftIO $ logger req status (Just len)
--- >     liftIO $ hFlush stdout
--- >     return $ ResponseBuilder status
--- >         [("Content-Type", "text/plain")
--- >         ,("Content-Length", pack (show len))]
--- >         $ fromByteString "PONG"
---
--- Low level sample code:
---
--- > {-# LANGUAGE OverloadedStrings #-}
--- > module Main where
--- >
--- > import Blaze.ByteString.Builder (fromByteString)
--- > import Control.Monad.IO.Class (liftIO)
--- > import Data.ByteString.Char8
--- > import Network.HTTP.Types (status200)
--- > import Network.Wai
--- > import Network.Wai.Handler.Warp
--- > import Network.Wai.Logger
--- > import System.IO
--- > import System.Log.FastLogger
--- >
--- > main :: IO ()
--- > main = do
--- >     dref <- dateInit
--- >     run 3000 $ logapp dref
--- >
--- > logapp :: DateRef -> Application
--- > logapp dref req = do
--- >     date <- liftIO $ getDate dref
+-- > logapp aplogger req = do
 -- >     let status = status200
 -- >         len = 4
--- >     liftIO $ hPutLogStr stdout $ apacheFormat FromSocket date req status (Just len)
--- >     liftIO $ hFlush stdout
+-- >     liftIO $ aplogger req status (Just len)
 -- >     return $ ResponseBuilder status
 -- >         [("Content-Type", "text/plain")
 -- >         ,("Content-Length", pack (show len))]
@@ -68,14 +34,12 @@
     ApacheLogger
   , stdoutApacheLoggerInit
   , module Network.Wai.Logger.Format
-  , module Network.Wai.Logger.Date
   , module Network.Wai.Logger.Utils
   ) where
 
 import Control.Applicative
 import Network.HTTP.Types
 import Network.Wai
-import Network.Wai.Logger.Date
 import Network.Wai.Logger.Format
 import Network.Wai.Logger.Utils
 import System.IO
@@ -85,11 +49,15 @@
 type ApacheLogger = Request -> Status -> Maybe Integer -> IO ()
 
 -- | Obtaining Apache style logger to stdout
-stdoutApacheLoggerInit :: IPAddrSource -> IO ApacheLogger
-stdoutApacheLoggerInit ipsrc = stdoutLogger ipsrc <$> dateInit
+stdoutApacheLoggerInit :: IPAddrSource
+                       -> Bool -- ^ Automatically flush on each logging?
+                       -> IO ApacheLogger
+stdoutApacheLoggerInit ipsrc autoFlash =
+    stdoutLogger ipsrc <$> mkLogger autoFlash stdout
 
-stdoutLogger :: IPAddrSource -> DateRef -> ApacheLogger
-stdoutLogger ipsrc dateref req status msiz =
-    getDate dateref >>= hPutLogStr stdout . logmsg >> hFlush stdout
+stdoutLogger :: IPAddrSource -> Logger -> ApacheLogger
+stdoutLogger ipsrc logger req status msiz = do
+    date <- loggerDate logger
+    loggerPutStr logger $ logmsg date
   where
     logmsg date = apacheFormat ipsrc date req status msiz
diff --git a/Network/Wai/Logger/Date.hs b/Network/Wai/Logger/Date.hs
deleted file mode 100644
--- a/Network/Wai/Logger/Date.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Network.Wai.Logger.Date (
-    ZonedDate
-  , DateRef
-  , dateInit
-  , getDate
-  ) where
-
-import Control.Applicative
-import Data.ByteString (ByteString)
-import qualified Data.ByteString.Char8 as BS
-import Data.IORef
-import Data.Time
-import System.Locale
-#if WINDOWS
-#define TIME UTCTime
-#define GETTIME getCurrentTime
-#else
-import System.Posix (EpochTime, epochTime)
-import Data.Time.Clock.POSIX
-#define TIME EpochTime
-#define GETTIME epochTime
-#endif
-
--- | A type for zoned date.
-type ZonedDate = ByteString
-
-data DateCache = DateCache {
-    unixTime :: !TIME
-  , zonedDate :: !ZonedDate
-  }
-
--- | Reference to the 'ZonedDate' cache.
-newtype DateRef = DateRef (IORef DateCache)
-
--- | Getting 'ZonedDate' from the 'ZonedDate' cache.
-getDate :: DateRef -> IO ZonedDate
-getDate (DateRef ref) = do
-    newEt <- GETTIME
-    cache <- readIORef ref
-    let oldEt = unixTime cache
-    if oldEt == newEt then
-        return $ zonedDate cache
-      else do
-        newCache <- newDate newEt
-        writeIORef ref newCache
-        return $ zonedDate newCache
-
-newDate :: TIME -> IO DateCache
-newDate et = DateCache et . format <$> toZonedTime et
-  where
-    toZonedTime = utcToLocalZonedTime . toUTC
-#if WINDOWS
-    toUTC = id
-#else
-    toUTC = posixSecondsToUTCTime . realToFrac
-#endif
-    format = BS.pack . formatTime defaultTimeLocale "%d/%b/%Y:%T %z"
-
--- | Initializing the 'ZonedDate' cache.
-dateInit :: IO DateRef
-dateInit = DateRef <$> (GETTIME >>= newDate >>= newIORef)
diff --git a/Network/Wai/Logger/Format.hs b/Network/Wai/Logger/Format.hs
--- a/Network/Wai/Logger/Format.hs
+++ b/Network/Wai/Logger/Format.hs
@@ -9,16 +9,16 @@
 
 import Blaze.ByteString.Builder
 import Blaze.ByteString.Builder.Char8
-import Data.ByteString.Char8 ()
+import Data.ByteString.Char8 (ByteString)
 import Data.CaseInsensitive
 import Data.List
 import Data.Maybe
 import Data.Monoid
 import Network.HTTP.Types
 import Network.Wai
-import Network.Wai.Logger.Date
 import Network.Wai.Logger.Utils
 import System.Log.FastLogger
+import System.Log.FastLogger.Date
 
 {-| Source from which the IP source address of the client is obtained.
 -}
@@ -79,7 +79,7 @@
     bs = fromByteString
     (+++) = mappend
 
-lookupRequestField' :: CI Ascii -> Request -> Ascii
+lookupRequestField' :: CI ByteString -> Request -> ByteString
 lookupRequestField' k req = fromMaybe "" . lookup k $ requestHeaders req
 
 getSourceIP :: IPAddrSource -> Request -> LogStr
@@ -90,7 +90,7 @@
 getSourceIP' FromSocket = fromString . showSockAddr . remoteHost
 getSourceIP' FromHeader = fromByteString . getSource
 
-getSource :: Request -> Ascii
+getSource :: Request -> ByteString
 getSource req = addr
   where
     maddr = find (\x -> fst x `elem` ["x-real-ip", "x-forwarded-for"]) hdrs
diff --git a/wai-logger.cabal b/wai-logger.cabal
--- a/wai-logger.cabal
+++ b/wai-logger.cabal
@@ -1,5 +1,5 @@
 Name:                   wai-logger
-Version:                0.1.4
+Version:                0.2.0
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -10,22 +10,19 @@
 Cabal-Version:          >= 1.6
 Build-Type:             Simple
 library
-  if impl(ghc >= 6.12)
-    GHC-Options:        -Wall -fno-warn-unused-do-bind
-  else
-    GHC-Options:        -Wall
+  GHC-Options:          -Wall
   Exposed-Modules:      Network.Wai.Logger
-                        Network.Wai.Logger.Date
                         Network.Wai.Logger.Format
                         Network.Wai.Logger.Utils
-  Build-Depends:        base >= 4 && < 5, time, old-locale,
-                        bytestring, blaze-builder,
-                        wai, fast-logger, http-types, case-insensitive,
-                        network, byteorder
-  if os(windows)
-    cpp-options: -DWINDOWS
-  else
-    build-depends: unix
+  Build-Depends:        base >= 4 && < 5
+                      , blaze-builder
+                      , byteorder
+                      , bytestring
+                      , case-insensitive
+                      , fast-logger >= 0.2
+                      , http-types
+                      , network
+                      , wai
 Source-Repository head
   Type:                 git
   Location:             git://github.com/kazu-yamamoto/logger.git
