diff --git a/Web/Routes/PathInfo.hs b/Web/Routes/PathInfo.hs
--- a/Web/Routes/PathInfo.hs
+++ b/Web/Routes/PathInfo.hs
@@ -1,13 +1,28 @@
 {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
-module Web.Routes.PathInfo where
+module Web.Routes.PathInfo
+    ( stripOverlap
+    , URLParser
+    , pToken
+    , segment
+    , anySegment
+    , patternParse
+    , parseSegments
+    , PathInfo(..)
+    , toPathInfo
+    , toPathInfoParams
+    , fromPathInfo
+    , mkSitePI
+    , showParseError
+    ) where
 
-import Control.Applicative (pure, (*>),(<*>))
+import Control.Applicative ((<*))
 import Control.Monad (msum)
 import Data.List (stripPrefix, tails)
 import Data.Maybe (fromJust)
+import Text.ParserCombinators.Parsec.Combinator (notFollowedBy)
 import Text.ParserCombinators.Parsec.Error (ParseError, errorPos, errorMessages, showErrorMessages)
 import Text.ParserCombinators.Parsec.Pos   (incSourceLine, sourceName, sourceLine, sourceColumn)
-import Text.ParserCombinators.Parsec.Prim  ((<?>), GenParser, getInput, setInput, pzero,getPosition, token, parse, many)
+import Text.ParserCombinators.Parsec.Prim  ((<?>), GenParser, getInput, setInput, getPosition, token, parse, many)
 import Web.Routes.Base (decodePathInfo, encodePathInfo)
 import Web.Routes.Site (Site(..))
 
@@ -29,6 +44,10 @@
 anySegment :: URLParser String
 anySegment = pToken (const "any string") Just
 
+-- | Only matches if all segments have been consumed
+eof :: URLParser ()
+eof = notFollowedBy anySegment <?> "end of input"
+
 -- | apply a function to the remainder of the segments
 --
 -- useful if you want to just do normal pattern matching:
@@ -54,7 +73,7 @@
 -- returns @Right a@ on success
 parseSegments :: URLParser a -> [String] -> Either String a
 parseSegments p segments =
-  case parse p (show segments) segments of
+  case parse (p <* eof) (show segments) segments of
     (Left e)  -> Left (showParseError e)
     (Right r) -> Right r
 
diff --git a/Web/Routes/Site.hs b/Web/Routes/Site.hs
--- a/Web/Routes/Site.hs
+++ b/Web/Routes/Site.hs
@@ -1,7 +1,5 @@
 module Web.Routes.Site where
 
-import Data.Maybe (isJust, fromJust)
-import Data.Monoid (Monoid(mappend))
 import Web.Routes.Base (decodePathInfo, encodePathInfo)
 
 {-|
diff --git a/web-routes.cabal b/web-routes.cabal
--- a/web-routes.cabal
+++ b/web-routes.cabal
@@ -1,5 +1,5 @@
 Name:             web-routes
-Version:          0.25.2
+Version:          0.25.3
 License:          BSD3
 License-File:     LICENSE
 Author:           jeremy@seereason.com
