diff --git a/Network/Wai/Metrics.hs b/Network/Wai/Metrics.hs
--- a/Network/Wai/Metrics.hs
+++ b/Network/Wai/Metrics.hs
@@ -7,7 +7,7 @@
 A <http://hackage.haskell.org/package/wai WAI> middleware to collect the following <https://ocharles.org.uk/blog/posts/2012-12-11-24-day-of-hackage-ekg.html EKG> metrics from compatible web servers:
 
 * number of requests (counter @wai.request_count@)
-* number of server errors (counter @wai.server_error_count@)
+* number of response by status code, broken down class (count @wai.response_status_xxx@)
 * latency distribution (distribution @wai.latency_distribution@)
 
 
@@ -46,34 +46,46 @@
 
 import Network.Wai
 import System.Metrics
-import Control.Monad (when)
+import Control.Applicative
 import Data.Time.Clock
 import qualified System.Metrics.Counter as Counter
 import qualified System.Metrics.Distribution as Distribution
-import Network.HTTP.Types.Status (statusIsServerError)
+import Network.HTTP.Types.Status (statusCode)
 
 {-|
 The metrics to feed in WAI and register in EKG.
 -}
 data WaiMetrics = WaiMetrics {
   requestCounter :: Counter.Counter
- ,serverErrorCounter :: Counter.Counter
  ,latencyDistribution :: Distribution.Distribution
+ ,statusCode100Counter :: Counter.Counter
+ ,statusCode200Counter :: Counter.Counter
+ ,statusCode300Counter :: Counter.Counter
+ ,statusCode400Counter :: Counter.Counter
+ ,statusCode500Counter :: Counter.Counter
 }
 
 {-|
 Register in EKG a number of metrics related to web server activity.
 
 * @wai.request_count@
-* @wai.server_error_count@
+* @wai.response_status_1xx@
+* @wai.response_status_2xx@
+* @wai.response_status_3xx@
+* @wai.response_status_4xx@
+* @wai.response_status_5xx@
 * @wai.latency_distribution@
 -}
 registerWaiMetrics :: Store -> IO WaiMetrics
-registerWaiMetrics store = do
-  req <- createCounter "wai.request_count" store
-  err <- createCounter "wai.server_error_count" store
-  tim <- createDistribution "wai.latency_distribution" store
-  return $ WaiMetrics req err tim
+registerWaiMetrics store =
+  WaiMetrics
+    <$> createCounter "wai.request_count" store
+    <*> createDistribution "wai.latency_distribution" store
+    <*> createCounter "wai.response_status_1xx" store
+    <*> createCounter "wai.response_status_2xx" store
+    <*> createCounter "wai.response_status_3xx" store
+    <*> createCounter "wai.response_status_4xx" store
+    <*> createCounter "wai.response_status_5xx" store
 
 {-|
 Create a middleware to be added to a WAI-based webserver.
@@ -85,7 +97,12 @@
   app req (respond' start)
     where respond' :: UTCTime -> Response -> IO ResponseReceived
           respond' start res = do
-            when (statusIsServerError $ responseStatus res) (Counter.inc (serverErrorCounter waiMetrics))
+            Counter.inc $ case statusCode $ responseStatus res of
+              s | s >= 500  -> statusCode500Counter waiMetrics
+                | s >= 400  -> statusCode400Counter waiMetrics
+                | s >= 300  -> statusCode300Counter waiMetrics
+                | s >= 200  -> statusCode200Counter waiMetrics
+                | otherwise -> statusCode100Counter waiMetrics
             end <- getCurrentTime
             Distribution.add (latencyDistribution waiMetrics) (realToFrac $ diffUTCTime end start)
             respond res
diff --git a/tests.hs b/tests.hs
--- a/tests.hs
+++ b/tests.hs
@@ -58,7 +58,7 @@
 readErrorCounter :: (Application -> IO a) -> Int -> IO Int64
 readErrorCounter action times = do
   waiMetrics <- testServer action times
-  Counter.read (serverErrorCounter waiMetrics)
+  Counter.read (statusCode500Counter waiMetrics)
 
 -- Return the response time distribution after running n times
 -- an action over a fresh scotty server
diff --git a/wai-middleware-metrics.cabal b/wai-middleware-metrics.cabal
--- a/wai-middleware-metrics.cabal
+++ b/wai-middleware-metrics.cabal
@@ -1,7 +1,7 @@
 name:                wai-middleware-metrics
-version:             0.2.1
+version:             0.2.2
 synopsis:            A WAI middleware to collect EKG request metrics
-description:         This WAI middleware counts the number of requests, the number of server errors (http status >= 500) and keeps a latency distribution.
+description:         This WAI middleware counts the number of requests, the number of responses by status code and keeps a latency distribution.
                      .
                      It can be added to any WAI-based webserver, such as Yesod, Scotty, Spock and Servant.
                      .
@@ -34,7 +34,7 @@
                      , tasty >= 0.10.1
                      , tasty-hunit >= 0.8
                      , tasty-quickcheck >= 0.8.2
-                     , QuickCheck == 2.7
+                     , QuickCheck >= 2.7
                      , scotty >= 0.8.0
                      , transformers >= 0.3
                      , bytestring >= 0.10.0.2
@@ -44,6 +44,7 @@
   type:                exitcode-stdio-1.0
   main-is:             tests.hs
   default-language:    Haskell2010
+  other-modules:       Network.Wai.Metrics
 
 benchmark metrics-bench
   build-depends:       base
@@ -60,6 +61,7 @@
   main-is:             Benchmark.hs
   default-language:    Haskell2010
   ghc-options:         -Wall -O2
+  other-modules:       Network.Wai.Metrics
 
 source-repository head
   type:     git
