diff --git a/src/Network/Wai/Middleware/ContentType.hs b/src/Network/Wai/Middleware/ContentType.hs
--- a/src/Network/Wai/Middleware/ContentType.hs
+++ b/src/Network/Wai/Middleware/ContentType.hs
@@ -9,7 +9,7 @@
   , possibleFileExts
   ) where
 
-import Network.Wai.Middleware.ContentType.Types      as X
+import Network.Wai.Middleware.ContentType.Types      as X hiding (tell)
 import Network.Wai.Middleware.ContentType.Blaze      as X
 import Network.Wai.Middleware.ContentType.Builder    as X
 import Network.Wai.Middleware.ContentType.ByteString as X
diff --git a/src/Network/Wai/Middleware/ContentType/Blaze.hs b/src/Network/Wai/Middleware/ContentType/Blaze.hs
--- a/src/Network/Wai/Middleware/ContentType/Blaze.hs
+++ b/src/Network/Wai/Middleware/ContentType/Blaze.hs
@@ -11,8 +11,8 @@
 import           Network.Wai.Trans
 import qualified Text.Blaze.Html                         as H
 import qualified Text.Blaze.Html.Renderer.Text           as H
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @Html@ as the key in the map, and @"text/html"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Builder.hs b/src/Network/Wai/Middleware/ContentType/Builder.hs
--- a/src/Network/Wai/Middleware/ContentType/Builder.hs
+++ b/src/Network/Wai/Middleware/ContentType/Builder.hs
@@ -8,8 +8,8 @@
 
 import qualified Data.ByteString.Builder                 as BU
 import qualified Data.Map                                as Map
+import           Control.Monad.IO.Class
 
-import           Control.Monad.Writer
 
 
 -- | A builder is ambiguous, therefore we require @RequestHeaders@ and a @FileExt@ to be explicitly
diff --git a/src/Network/Wai/Middleware/ContentType/ByteString.hs b/src/Network/Wai/Middleware/ContentType/ByteString.hs
--- a/src/Network/Wai/Middleware/ContentType/ByteString.hs
+++ b/src/Network/Wai/Middleware/ContentType/ByteString.hs
@@ -10,9 +10,8 @@
 
 import qualified Data.ByteString.Lazy                    as B
 import           Data.Map
-
-import           Control.Monad.IO.Class (liftIO)
-import           Control.Monad.Writer
+import           Control.Monad.Trans (lift)
+import           Control.Monad.IO.Class
 
 
 -- * Lifted @MiddlewareT@
diff --git a/src/Network/Wai/Middleware/ContentType/Cassius.hs b/src/Network/Wai/Middleware/ContentType/Cassius.hs
--- a/src/Network/Wai/Middleware/ContentType/Cassius.hs
+++ b/src/Network/Wai/Middleware/ContentType/Cassius.hs
@@ -9,8 +9,8 @@
 
 import           Text.Cassius
 import qualified Data.Text.Lazy.Encoding                 as LT
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @cassius@ as the key in the map, and @"cassius/plain"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Clay.hs b/src/Network/Wai/Middleware/ContentType/Clay.hs
--- a/src/Network/Wai/Middleware/ContentType/Clay.hs
+++ b/src/Network/Wai/Middleware/ContentType/Clay.hs
@@ -10,8 +10,8 @@
 import           Clay.Render
 import           Clay.Stylesheet
 import qualified Data.Text.Lazy.Encoding                 as LT
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @Text@ as the key in the map, and @"text/css"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Json.hs b/src/Network/Wai/Middleware/ContentType/Json.hs
--- a/src/Network/Wai/Middleware/ContentType/Json.hs
+++ b/src/Network/Wai/Middleware/ContentType/Json.hs
@@ -8,8 +8,8 @@
 import           Network.Wai.Trans
 
 import qualified Data.Aeson                              as A
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 
diff --git a/src/Network/Wai/Middleware/ContentType/Julius.hs b/src/Network/Wai/Middleware/ContentType/Julius.hs
--- a/src/Network/Wai/Middleware/ContentType/Julius.hs
+++ b/src/Network/Wai/Middleware/ContentType/Julius.hs
@@ -9,8 +9,8 @@
 
 import           Text.Julius
 import qualified Data.Text.Lazy.Encoding                 as LT
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @julius@ as the key in the map, and @"application/javascript"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Lucid.hs b/src/Network/Wai/Middleware/ContentType/Lucid.hs
--- a/src/Network/Wai/Middleware/ContentType/Lucid.hs
+++ b/src/Network/Wai/Middleware/ContentType/Lucid.hs
@@ -8,8 +8,9 @@
 import           Network.Wai.Trans
 
 import qualified Lucid.Base                              as L
+import           Control.Monad.Trans
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses the @Html@ key in the map, and @"text/html"@ as the content type.
@@ -70,4 +71,4 @@
 
 lucidOnlyStatusHeaders :: Monad m =>
              Status -> RequestHeaders -> L.HtmlT m () -> m Response
-lucidOnlyStatusHeaders s hs i = liftM (bytestringOnlyStatus s hs) $ L.renderBST i
+lucidOnlyStatusHeaders s hs i = bytestringOnlyStatus s hs <$> L.renderBST i
diff --git a/src/Network/Wai/Middleware/ContentType/Lucius.hs b/src/Network/Wai/Middleware/ContentType/Lucius.hs
--- a/src/Network/Wai/Middleware/ContentType/Lucius.hs
+++ b/src/Network/Wai/Middleware/ContentType/Lucius.hs
@@ -9,8 +9,8 @@
 
 import           Text.Lucius
 import qualified Data.Text.Lazy.Encoding                 as LT
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @lucius@ as the key in the map, and @"lucius/css"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Middleware.hs b/src/Network/Wai/Middleware/ContentType/Middleware.hs
--- a/src/Network/Wai/Middleware/ContentType/Middleware.hs
+++ b/src/Network/Wai/Middleware/ContentType/Middleware.hs
@@ -3,7 +3,6 @@
 import Network.Wai.Middleware.ContentType.Types
 import Network.Wai.Trans
 import qualified Data.Map as Map
-import Control.Monad.Writer
 
 
 -- | Lifts a @MiddlewareT@ directly as a response to a file extension.
diff --git a/src/Network/Wai/Middleware/ContentType/Text.hs b/src/Network/Wai/Middleware/ContentType/Text.hs
--- a/src/Network/Wai/Middleware/ContentType/Text.hs
+++ b/src/Network/Wai/Middleware/ContentType/Text.hs
@@ -9,8 +9,8 @@
 
 import qualified Data.Text.Lazy                          as LT
 import qualified Data.Text.Lazy.Encoding                 as LT
+import           Control.Monad.IO.Class                  (MonadIO)
 
-import           Control.Monad.Writer
 
 
 -- | Uses @Text@ as the key in the map, and @"text/plain"@ as the content type.
diff --git a/src/Network/Wai/Middleware/ContentType/Types.hs b/src/Network/Wai/Middleware/ContentType/Types.hs
--- a/src/Network/Wai/Middleware/ContentType/Types.hs
+++ b/src/Network/Wai/Middleware/ContentType/Types.hs
@@ -8,16 +8,30 @@
   , MultiParamTypeClasses
   #-}
 
-module Network.Wai.Middleware.ContentType.Types where
+module Network.Wai.Middleware.ContentType.Types
+  ( FileExt (..)
+  , getFileExt
+  , toExt
+  , FileExts (..)
+  , FileExtListenerT (..)
+  , execFileExtListenerT
+  , tell
+  ) where
 
 import           Network.Wai
 import qualified Data.Text              as T
 import           Data.Map
 import           Data.Maybe (fromMaybe)
+import           Data.Monoid
 import           Control.Monad.Trans
-import           Control.Monad.Writer
+import           Control.Monad.State
 
 
+tell :: (Monoid w, MonadState w m) => w -> m ()
+tell x = do
+  xs <- get
+  put $ xs <> x
+
 -- | Supported file extensions
 data FileExt = Html
              | Css
@@ -50,8 +64,8 @@
   deriving (Show, Eq, Monoid, Functor, Foldable, Traversable)
 
 newtype FileExtListenerT r m a =
-  FileExtListenerT { runFileExtListenerT :: WriterT (FileExts r) m a }
-    deriving (Functor, Applicative, Monad, MonadIO, MonadTrans, MonadWriter (FileExts r))
+  FileExtListenerT { runFileExtListenerT :: StateT (FileExts r) m a }
+    deriving (Functor, Applicative, Monad, MonadIO, MonadTrans, MonadState (FileExts r))
 
 execFileExtListenerT :: Monad m => FileExtListenerT r m a -> m (FileExts r)
-execFileExtListenerT = execWriterT . runFileExtListenerT
+execFileExtListenerT xs = execStateT (runFileExtListenerT xs) mempty
diff --git a/wai-middleware-content-type.cabal b/wai-middleware-content-type.cabal
--- a/wai-middleware-content-type.cabal
+++ b/wai-middleware-content-type.cabal
@@ -1,5 +1,5 @@
 Name:                   wai-middleware-content-type
-Version:                0.0.0
+Version:                0.0.1
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
