diff --git a/Network/Wai/Middleware/Throttle.hs b/Network/Wai/Middleware/Throttle.hs
--- a/Network/Wai/Middleware/Throttle.hs
+++ b/Network/Wai/Middleware/Throttle.hs
@@ -17,7 +17,7 @@
 -- @
 -- main = do
 --   st <- initThrottler
---   let payload  = "{ \"api\", \"return data\" }"
+--   let payload  = "{ \"api\": \"return data\" }"
 --       app = throttle defaultThrottleSettings st
 --               $ \_ f -> f (responseLBS status200 [] payload)
 --   Warp.run 3000 app
@@ -43,13 +43,10 @@
     , defaultThrottleSettings
     ) where
 
-import           Control.Applicative
 import           Control.Concurrent.STM
 import           Control.Concurrent.TokenBucket
 import           Control.Monad                  (liftM)
-import qualified Data.ByteString.Char8          as BS
-import qualified Data.HashMap.Strict            as H
-import qualified Data.Text                      as T
+import qualified Data.IntMap                    as IM
 import           GHC.Word                       (Word64)
 import qualified Network.HTTP.Types.Status      as Http
 import           Network.Socket
@@ -60,7 +57,7 @@
 
 
 -- | A 'HashMap' mapping the remote IP address to a 'TokenBucket'
-data ThrottleState = ThrottleState !(H.HashMap T.Text TokenBucket)
+data ThrottleState = ThrottleState !(IM.IntMap TokenBucket)
 
 
 -- | Settings which control various behaviors in the middleware.
@@ -85,8 +82,7 @@
 
       -- Maximum size of the address cache in MB (similar to nginx)
       --
-      -- You can store approximately 160,000 addresses in 10MB with
-      -- \$binary_remote_addr.
+      -- With nginx, can store approximately 160,000 addresses in 10MB.
       -- , throttleCacheSize :: !Integer
 
       -- | Burst rate
@@ -95,7 +91,7 @@
 
 
 initThrottler :: IO WaiThrottle
-initThrottler = liftM WT $ newTVarIO $ ThrottleState H.empty
+initThrottler = liftM WT $ newTVarIO $ ThrottleState IM.empty
 
 
 -- | Default settings to throttle requests.
@@ -110,20 +106,15 @@
       , onThrottled         = onThrottled'
       }
   where
-    bshow = BS.pack . show
-    -- remaining = bshow (if 5000 - c < 0
-    --                      then 0
-    --                      else 5000 - c)
-    onThrottled' rt =
+    onThrottled' _ =
       responseLBS
         Http.status429
         [ ("Content-Type", "application/json")
-          -- , ("X-RateLimit-Limit", "5000")
+          -- , ("X-RateLimit-Limit", limit)
           -- , ("X-RateLimit-Remaining", remaining)
-        , ("X-RateLimit-Reset",
-             bshow (fromIntegral rt / 1000000.0 :: Double))
+          -- , ("X-RateLimit-Reset",
+          --      bshow (fromIntegral rt / 1000000.0 :: Double))
         ]
-        -- match YesodAuth error message renderer
         "{\"message\":\"Too many requests.\"}"
 
 
@@ -151,10 +142,9 @@
   where
     throttleReq = do
 
-      let SockAddrInet _ host = remoteHost req
-      remoteAddr     <- T.pack <$> inet_ntoa host
+      let SockAddrInet _ remoteAddr = remoteHost req
       throttleState  <- atomically $ readTVar tmap
-      (tst, success) <- throttleReq' remoteAddr throttleState
+      (tst, success) <- throttleReq' (fromIntegral remoteAddr) throttleState
 
       -- write the throttle state back
       atomically $ writeTVar tmap (ThrottleState tst)
@@ -166,7 +156,7 @@
           invRate     = toInvRate (fromInteger throttleRate :: Double)
           burst       = fromInteger throttleBurst
 
-      bucket    <- maybe newTokenBucket return $ H.lookup remoteAddr m
+      bucket    <- maybe newTokenBucket return $ IM.lookup remoteAddr m
       remaining <- tokenBucketTryAlloc1 bucket burst invRate
 
-      return (H.insert remoteAddr bucket m, remaining)
+      return (IM.insert remoteAddr bucket m, remaining)
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,10 @@
 import Distribution.Simple
-main = defaultMain
+import Distribution.Simple.Program
+
+main :: IO ()
+main = defaultMainWithHooks simpleUserHooks
+       {
+         -- cabal-install is used during testing to run
+         -- and verify haddock documentation.
+         hookedPrograms = [ simpleProgram "cabal" ]
+       }
diff --git a/wai-middleware-throttle.cabal b/wai-middleware-throttle.cabal
--- a/wai-middleware-throttle.cabal
+++ b/wai-middleware-throttle.cabal
@@ -1,6 +1,6 @@
 
 name:                wai-middleware-throttle
-version:             0.1.0.1
+version:             0.2.0.0
 license:             BSD3
 license-file:        LICENSE
 author:              Christopher Reichert
@@ -27,9 +27,7 @@
   default-language:    Haskell2010
   build-depends:       base                  >= 4.6 && < 5.0
                      , wai                   >= 3.0
-                     , text
-                     , unordered-containers
-                     , bytestring
+                     , containers
                      , transformers
                      , network
                      , http-types
@@ -55,7 +53,6 @@
                      , hspec                    >= 1.3
                      , http-types
                      , HUnit
-                     , unordered-containers
                      , stm
                      , transformers
 
@@ -77,4 +74,4 @@
   type:             exitcode-stdio-1.0
   default-language: Haskell2010
   build-depends:    base
-                  , hlint == 1.8.*
+                  , hlint
