diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs
--- a/Network/Wai/Application/Static.hs
+++ b/Network/Wai/Application/Static.hs
@@ -31,6 +31,7 @@
     ) where
 
 import qualified Network.Wai as W
+import qualified Network.HTTP.Types as H
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.ByteString (ByteString)
@@ -38,7 +39,6 @@
 import qualified Data.ByteString.Char8 as S8
 import qualified Data.ByteString.Lazy as L
 import Data.ByteString.Lazy.Char8 ()
-import Web.Routes.Base (decodePathInfo, encodePathInfo)
 import System.PosixCompat.Files (fileSize, getFileStatus, modificationTime)
 import System.Posix.Types (FileOffset, EpochTime)
 import Control.Monad.IO.Class (liftIO)
@@ -49,6 +49,9 @@
 import qualified Text.Blaze.Renderer.Utf8    as HU
 import qualified Text.Blaze.Html5.Attributes as A
 
+import Blaze.ByteString.Builder (toByteString, copyByteString)
+import Data.Monoid (mappend)
+
 import Data.Time
 import Data.Time.Clock.POSIX
 import System.Locale (defaultTimeLocale)
@@ -244,48 +247,52 @@
 
 staticApp :: StaticSettings -> W.Application
 staticApp set req = do
-    let pieces = decodePathInfo $ S8.unpack $ W.pathInfo req
+    let pieces = W.pathInfo req
     staticAppPieces set pieces req
 
-staticAppPieces :: StaticSettings -> [String] -> W.Application
+staticAppPieces :: StaticSettings -> [T.Text] -> W.Application
 staticAppPieces _ _ req
     | W.requestMethod req /= "GET" = return $ W.responseLBS
-        W.status405
+        H.status405
         [("Content-Type", "text/plain")]
         "Only GET is supported"
-staticAppPieces (StaticSettings folder indices mlisting getmime) pieces _ = liftIO $ do
+staticAppPieces (StaticSettings folder indices mlisting getmime) piecesT _ = liftIO $ do
+    let pieces = map T.unpack piecesT -- FIXME stick with Text
     cp <- checkPieces folder indices pieces
     case cp of
         Redirect pieces' -> do
-            let loc = S8.pack $ (concatMap (const "../") $ drop 1 pieces) ++ encodePathInfo pieces' []
-            return $ W.responseLBS W.status301
+            let loc =
+                    toByteString $
+                    foldr mappend (H.encodePathSegments $ map T.pack pieces') -- FIXME use Text
+                    $ map (const $ copyByteString "../") $ drop 1 pieces
+            return $ W.responseLBS H.status301
                 [ ("Content-Type", "text/plain")
                 , ("Location", loc)
                 ] "Redirect"
-        Forbidden -> return $ W.responseLBS W.status403
+        Forbidden -> return $ W.responseLBS H.status403
                         [ ("Content-Type", "text/plain")
                         ] "Forbidden"
-        NotFound -> return $ W.responseLBS W.status404
+        NotFound -> return $ W.responseLBS H.status404
                         [ ("Content-Type", "text/plain")
                         ] "File not found"
         FileResponse fp -> do
             mimetype <- getmime fp
             filesize <- fileSize `fmap` getFileStatus fp
-            return $ W.ResponseFile W.status200
+            return $ W.ResponseFile H.status200
                         [ ("Content-Type", mimetype)
                         , ("Content-Length", S8.pack $ show filesize)
-                        ] fp
+                        ] fp Nothing
         DirectoryResponse fp ->
             case mlisting of
                 Just listing -> do
                     lbs <- listing pieces fp
-                    return $ W.responseLBS W.status200
+                    return $ W.responseLBS H.status200
                         [ ("Content-Type", "text/html; charset=utf-8")
                         ] lbs
-                Nothing -> return $ W.responseLBS W.status403
+                Nothing -> return $ W.responseLBS H.status403
                         [ ("Content-Type", "text/plain")
                         ] "Directory listings disabled"
-        SendContent mt lbs -> return $ W.responseLBS W.status200
+        SendContent mt lbs -> return $ W.responseLBS H.status200
                         [ ("Content-Type", mt)
                         ] lbs
 
diff --git a/wai-app-static.cabal b/wai-app-static.cabal
--- a/wai-app-static.cabal
+++ b/wai-app-static.cabal
@@ -1,5 +1,5 @@
 name:            wai-app-static
-version:         0.0.1.4
+version:         0.1.0
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -10,14 +10,14 @@
 stability:       Stable
 cabal-version:   >= 1.6
 build-type:      Simple
-homepage:        http://docs.yesodweb.com/
+homepage:        http://www.yesodweb.com/
 Extra-source-files: folder.png, haskell.png
 
 library
     build-depends:   base                      >= 4        && < 5
-                   , wai                       >= 0.3      && < 0.4
+                   , wai                       >= 0.4      && < 0.5
                    , bytestring                >= 0.9.1.4  && < 0.10
-                   , web-routes                >= 0.23     && < 0.24
+                   , http-types                >= 0.6      && < 0.7
                    , transformers              >= 0.2.2    && < 0.3
                    , unix-compat               >= 0.2      && < 0.3
                    , directory                 >= 1.0      && < 1.2
@@ -27,6 +27,7 @@
                    , old-locale                >= 1.0.0.2  && < 1.1
                    , file-embed                >= 0.0.3.1  && < 0.1
                    , text                      >= 0.5      && < 1.0
+                   , blaze-builder             >= 0.2.1.4  && < 0.4
     exposed-modules: Network.Wai.Application.Static
     ghc-options:     -Wall
 
