diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Wai Routes (wai-routes-0.3.0)
+Wai Routes (wai-routes-0.3.1)
 ==============================
 
 This package provides typesafe URLs for Wai applications.
@@ -72,4 +72,5 @@
 0.2.3 : Implemented a better showRoute function. Added blaze-builder as a dependency
 0.2.4 : Put an upper bound on yesod-routes version as 1.2 breaks API compatibility
 0.3.0 : yesod-routes 1.2 compatibility. Abstracted request data. Created `runNext` which skips to the next app in the wai stack
+0.3.1 : Removed internal 'App' synonym which only muddied the types. Added common content types for convenience.
 
diff --git a/examples/Example.hs b/examples/Example.hs
--- a/examples/Example.hs
+++ b/examples/Example.hs
@@ -3,6 +3,7 @@
 
 import Network.Wai
 import Network.Wai.Middleware.Routes
+import Network.Wai.Middleware.Routes.ContentTypes
 import Network.Wai.Application.Static
 import Network.Wai.Handler.Warp
 import Network.HTTP.Types
@@ -39,16 +40,19 @@
 /skip        SkipR             GET
 |]
 
--- Our handlers always produce json
-jsonHeaders :: ResponseHeaders
-jsonHeaders = [("Content-Type", "application/json")]
 
 -- Handlers
 
+-- Standard Json output
+jsonOut :: ToJSON a => a -> Response
+jsonOut = responseLBS status200 jsonHeaders . encode
+  where
+    jsonHeaders :: ResponseHeaders
+    jsonHeaders = [contentType typeJson]
+
 -- Display the possible actions
 getHomeR :: Handler MyRoute
-getHomeR _master req = return $ responseLBS status200 jsonHeaders jsonOut
-  where jsonOut = encode $ M.fromList (
+getHomeR _master _req = return $ jsonOut $ M.fromList (
                  [("description", [["Simple User database Example"]])
                  ,("links"
                   ,[["home",  showRoute HomeR]
@@ -63,10 +67,10 @@
 getUsersR (MyRoute dbref) _req = do
   db <- liftIO $ readIORef dbref
   let dblinks = map linkify db
-  let jsonOut = encode $ M.fromList (
+  let out = M.fromList (
           [("description", [["Users List"]])
           ,("links", dblinks)] :: [(Text, [[Text]])] )
-  return $ responseLBS status200 jsonHeaders jsonOut
+  return $ jsonOut out
   where
     linkify user = [userName user, showRoute $ UserR (userId user) UserRootR]
 
@@ -75,9 +79,9 @@
 getUserRootR i (MyRoute dbref) _req = do
   db <- liftIO $ readIORef dbref
   case ulookup i db of
-    Nothing -> return $ responseLBS status200 jsonHeaders $ encode ("ERROR: User not found" :: Text)
+    Nothing -> return $ jsonOut ("ERROR: User not found" :: Text)
     Just user -> do
-      let jsonOut = encode $ M.fromList (
+      let out = M.fromList (
             [("description", [["User details"]])
             ,("data"
              ,[["Id",   T.pack $ show $ userId user]
@@ -91,22 +95,20 @@
               ]
              )
             ] :: [(Text, [[Text]])] )
-      return $ responseLBS status200 jsonHeaders jsonOut
+      return $ jsonOut out
   where
     ulookup _ [] = Nothing
     ulookup ui (u:us) = if userId u == ui then Just u else ulookup ui us
 
 -- Delete a user: GET
 getUserDeleteR :: Int -> Handler MyRoute
-getUserDeleteR _ _master req = return $ responseLBS status200 jsonHeaders jsonOut
+getUserDeleteR _ _master _req = return $ jsonOut err
   where err = ["DELETE","please use POST"]::[Text]
-        jsonOut = encode err
 
 -- Delete a user: POST
 postUserDeleteR :: Int -> Handler MyRoute
-postUserDeleteR _ _master _req = return $ responseLBS status200 jsonHeaders jsonOut
+postUserDeleteR _ _master _req = return $ jsonOut err
   where err = ["DELETE","not implemented"]::[Text]
-        jsonOut = encode err
 
 -- Demonstrate skipping routes
 getSkipR :: Handler MyRoute
@@ -129,9 +131,8 @@
 
 getSkippedR :: Handler MySkippedRoute
 getSkippedR _req _master =
-  return $ responseLBS status200 jsonHeaders jsonOut
+  return $ jsonOut err
   where err = ["SKIPPED","skipped route"]::[Text]
-        jsonOut = encode err
 
 -- The application that uses our route
 -- NOTE: We use the Route Monad to simplify routing
@@ -144,5 +145,7 @@
 
 -- Run the application
 main :: IO ()
-main = toWaiApp application >>= run 8080
+main = do
+  putStrLn "Starting server on port 8080"
+  toWaiApp application >>= run 8080
 
diff --git a/src/Network/Wai/Middleware/Routes/ContentTypes.hs b/src/Network/Wai/Middleware/Routes/ContentTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/Wai/Middleware/Routes/ContentTypes.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving, TypeFamilies #-}
+
+{- |
+Module      :  Network.Wai.Middleware.Routes.ContentTypes
+Copyright   :  (c) Anupam Jain 2013
+License     :  MIT (see the file LICENSE)
+
+Maintainer  :  ajnsit@gmail.com
+Stability   :  experimental
+Portability :  non-portable (uses ghc extensions)
+
+Defines the commonly used content types
+-}
+module Network.Wai.Middleware.Routes.ContentTypes
+    ( -- * Construct content Type
+      contentType
+      -- * Various common content types
+    , typeHtml, typePlain, typeJson
+    , typeXml, typeAtom, typeRss
+    , typeJpeg, typePng, typeGif
+    , typeSvg, typeJavascript, typeCss
+    , typeFlv, typeOgv, typeOctet
+    )
+    where
+
+import Data.ByteString (ByteString)
+import Data.ByteString.Char8 () -- Import IsString instance for ByteString
+import Network.HTTP.Types.Header (HeaderName())
+
+-- | Creates a content type header
+-- Ready to be passed to `responseLBS`
+contentType :: ByteString -> (HeaderName, ByteString)
+contentType typ = ("Content-Type", typ)
+
+typeHtml :: ByteString
+typeHtml = "text/html; charset=utf-8"
+
+typePlain :: ByteString
+typePlain = "text/plain; charset=utf-8"
+
+typeJson :: ByteString
+typeJson = "application/json; charset=utf-8"
+
+typeXml :: ByteString
+typeXml = "text/xml"
+
+typeAtom :: ByteString
+typeAtom = "application/atom+xml"
+
+typeRss :: ByteString
+typeRss = "application/rss+xml"
+
+typeJpeg :: ByteString
+typeJpeg = "image/jpeg"
+
+typePng :: ByteString
+typePng = "image/png"
+
+typeGif :: ByteString
+typeGif = "image/gif"
+
+typeSvg :: ByteString
+typeSvg = "image/svg+xml"
+
+typeJavascript :: ByteString
+typeJavascript = "text/javascript; charset=utf-8"
+
+typeCss :: ByteString
+typeCss = "text/css; charset=utf-8"
+
+typeFlv :: ByteString
+typeFlv = "video/x-flv"
+
+typeOgv :: ByteString
+typeOgv = "video/ogg"
+
+typeOctet :: ByteString
+typeOctet = "application/octet-stream"
+
diff --git a/src/Network/Wai/Middleware/Routes/Monad.hs b/src/Network/Wai/Middleware/Routes/Monad.hs
--- a/src/Network/Wai/Middleware/Routes/Monad.hs
+++ b/src/Network/Wai/Middleware/Routes/Monad.hs
@@ -46,7 +46,7 @@
 setDefaultApp :: Application -> RouteState -> RouteState
 setDefaultApp a s = s {defaultApp=a}
 
--- ! The Route Monad
+-- | The Route Monad
 newtype RouteM a = S { runS :: StateT RouteState IO a }
     deriving (Monad, MonadIO, Functor, MonadState RouteState)
 
@@ -60,7 +60,7 @@
 route :: (Routable master) => master -> RouteM ()
 route = middleware . routeDispatch
 
--- ! Set the default action of the Application.
+-- | Set the default action of the Application.
 -- You should only call this once in an application.
 -- Subsequent invocations override the previous settings.
 defaultAction :: Application -> RouteM ()
diff --git a/src/Network/Wai/Middleware/Routes/Routes.hs b/src/Network/Wai/Middleware/Routes/Routes.hs
--- a/src/Network/Wai/Middleware/Routes/Routes.hs
+++ b/src/Network/Wai/Middleware/Routes/Routes.hs
@@ -71,6 +71,9 @@
 import Control.Arrow (second)
 import Data.Maybe (fromMaybe)
 
+-- Common ContentTypes
+import Network.Wai.Middleware.Routes.ContentTypes
+
 -- An abstract request
 data RequestData = RequestData
   { waiReq  :: Request
@@ -81,11 +84,8 @@
 runNext :: RequestData -> ResourceT IO Response
 runNext req = nextApp req $ waiReq req
 
--- Internal data type for convenience
-type App = RequestData -> ResourceT IO Response
-
 -- | A `Handler` generates an App from the master datatype
-type Handler master = master -> App
+type Handler master = master -> RequestData -> ResourceT IO Response
 
 -- Baked in applications that handle 404 and 405 errors
 -- TODO: Inspect the request to figure out acceptable output formats
@@ -94,7 +94,7 @@
 app404 _master req = nextApp req $ waiReq req
 
 app405 :: Handler master
-app405 _master _req = return $ ResponseBuilder status405 [("Content-Type","text/plain")] $ fromByteString "405 - Method Not Allowed"
+app405 _master _req = return $ ResponseBuilder status405 [contentType typePlain] $ fromByteString "405 - Method Not Allowed"
 
 -- | Generates all the things needed for efficient routing,
 -- including your application's `Route` datatype, and
@@ -131,7 +131,7 @@
     :: Handler master
     -> master
     -> Maybe (Route master)
-    -> App
+    -> RequestData -> ResourceT IO Response -- App
 runHandler h master _ = h master
 
 -- | A `Routable` instance can be used in dispatching.
diff --git a/wai-routes.cabal b/wai-routes.cabal
--- a/wai-routes.cabal
+++ b/wai-routes.cabal
@@ -1,5 +1,5 @@
 Name:                wai-routes
-Version:             0.3.0
+Version:             0.3.1
 Synopsis:            Typesafe URLs for Wai applications.
 Homepage:            https://github.com/ajnsit/wai-routes
 License:             MIT
@@ -63,8 +63,8 @@
 
 source-repository this
   type:     git
-  location: http://github.com/ajnsit/wai-routes/tree/v0.3.0
-  tag:      v0.3.0
+  location: http://github.com/ajnsit/wai-routes/tree/v0.3.1
+  tag:      v0.3.1
 
 Library
   hs-source-dirs:    src
@@ -73,6 +73,7 @@
                ,     conduit >= 0.5 && < 1.1
                ,     path-pieces
                ,     text
+               ,     bytestring
                ,     http-types >= 0.7
                ,     blaze-builder >= 0.2.1.4 && < 0.4
                ,     template-haskell
@@ -81,4 +82,5 @@
   exposed-modules:   Network.Wai.Middleware.Routes
                ,     Network.Wai.Middleware.Routes.Routes
                ,     Network.Wai.Middleware.Routes.Monad
+               ,     Network.Wai.Middleware.Routes.ContentTypes
 
