diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -79,7 +79,7 @@
 
 viewsServer :: Server ViewsServer
 viewsServer = constHandler
-	    (Proxy :: Proxy ViewsServer)
+	    (Proxy :: Proxy Views)
 	    (Proxy :: Proxy Handler) $
 	    docTypeHtml $ do
 	      H.head $ return ()
diff --git a/servant-router.cabal b/servant-router.cabal
--- a/servant-router.cabal
+++ b/servant-router.cabal
@@ -1,5 +1,5 @@
 name:                servant-router
-version:             0.8.0
+version:             0.8.1
 synopsis:            Servant router for non-server applications.
 description:         Write Servant APIs to be routed without a server.
 homepage:            https://github.com/ElvishJerricco/servant-router
diff --git a/src/Servant/Router.hs b/src/Servant/Router.hs
--- a/src/Servant/Router.hs
+++ b/src/Servant/Router.hs
@@ -130,16 +130,23 @@
   constHandler _ _ = return
   route _ _ _ = RPage
 
+-- | Use a handler to route a 'Location'.
+-- Normally 'runRoute' should be used instead, unless you want custom
+-- handling of string failing to parse as 'URI'.
+runRouteLoc :: forall layout m a. (HasRouter layout, MonadError RoutingError m)
+         => Location -> Proxy layout -> RouteT layout m a -> m a
+runRouteLoc loc layout page =
+  let routing = route layout (Proxy :: Proxy m) (Proxy :: Proxy a) page
+  in routeLoc loc routing
+
 -- | Use a handler to route a location, represented as a 'String'.
 -- All handlers must, in the end, return @m a@.
 -- 'routeLoc' will choose a route and return its result.
 runRoute :: forall layout m a. (HasRouter layout, MonadError RoutingError m)
          => String -> Proxy layout -> RouteT layout m a -> m a
-runRoute loc' layout page = case uriToLocation <$> parseURI loc' of
+runRoute uriString layout page = case uriToLocation <$> parseURIReference uriString of
   Nothing -> throwError FailFatal
-  Just uri -> let
-    routing = route layout (Proxy :: Proxy m) (Proxy :: Proxy a) page
-    in routeLoc uri routing
+  Just loc -> runRouteLoc loc layout page
 
 -- | Use a computed 'Router' to route a 'Location'.
 routeLoc :: MonadError RoutingError m => Location -> Router m a -> m a
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -16,8 +16,10 @@
 testUris =
   [ "https://test.com/root/4?param=hi"
   , "https://test.com/other/hi/"
+  , "/other/relativeMatch"
   , "https://test.com/fail"
   , "https://test.com/root/fail"
+  , "/root/relativeFail"
   ]
 
 main :: IO ()
