diff --git a/nested-routes.cabal b/nested-routes.cabal
--- a/nested-routes.cabal
+++ b/nested-routes.cabal
@@ -2,12 +2,12 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: c5052b8557dda01bdd0835fdee96270827420d90308a2f409b2f64c317f8e3d4
+-- hash: c01d97006f99cd2296688bd70d1bff61663c843911d5c92a8484e2e578934d31
 
 name:           nested-routes
-version:        8.2.0
+version:        9.0.0
 synopsis:       Declarative, compositional Wai responses
-description:    This library attempts to make it easier to write nice Wai response handlers by giving us a Sinatra/ <https://hackage.haskell.org/package/scotty Scotty>-like syntax for declaring HTTP-verb oriented routes, in addition to file-extension handling and rose-tree like composition. Not only do we have literal route specification, like <https://hackage.haskell.org/package/scotty Scotty> & <https://hackage.haskell.org/package/spock Spock>, but we can also embed <https://hackage.haskell.org/package/attoparsec Attoparsec> parsers and <https://hackage.haskell.org/package/regex-compat Regular Expressions> /directly/ in our routes, with our handlers reflecting their results.
+description:    Please see the README on Github at <https://git.localcooking.com/tooling/pred-trie#readme>
 category:       Web
 homepage:       https://github.com/athanclark/nested-routes#readme
 bug-reports:    https://github.com/athanclark/nested-routes/issues
@@ -34,26 +34,20 @@
   build-depends:
       attoparsec
     , base >=4.9 && <5
-    , bifunctors
-    , bytestring
     , errors
     , exceptions
     , extractable-singleton
     , hashable
-    , hashtables
     , monad-control-aligned
     , mtl
     , poly-arity >=0.0.7
-    , pred-set >=0.0.1
-    , pred-trie >=0.5.1
+    , pred-trie >=0.6.0
     , regex-compat
-    , semigroups
     , text
-    , transformers
-    , tries
+    , tries >=0.0.5
     , unordered-containers
-    , wai-middleware-content-type >=0.5.0.1
-    , wai-middleware-verbs >=0.3.1
+    , wai-middleware-content-type >=0.6.0
+    , wai-middleware-verbs >=0.3.2
     , wai-transformers >=0.0.7
   default-language: Haskell2010
 
@@ -71,13 +65,10 @@
   build-depends:
       attoparsec
     , base
-    , bifunctors
-    , bytestring
     , errors
     , exceptions
     , extractable-singleton
     , hashable
-    , hashtables
     , hspec
     , hspec-wai
     , http-types
@@ -85,17 +76,14 @@
     , mtl
     , nested-routes
     , poly-arity >=0.0.7
-    , pred-set >=0.0.1
-    , pred-trie >=0.5.1
+    , pred-trie >=0.6.0
     , regex-compat
-    , semigroups
     , tasty
     , tasty-hspec
     , text
-    , transformers
-    , tries
+    , tries >=0.0.5
     , unordered-containers
-    , wai-middleware-content-type >=0.5.0.1
-    , wai-middleware-verbs >=0.3.1
+    , wai-middleware-content-type >=0.6.0
+    , wai-middleware-verbs >=0.3.2
     , wai-transformers >=0.0.7
   default-language: Haskell2010
diff --git a/src/Web/Routes/Nested.hs b/src/Web/Routes/Nested.hs
--- a/src/Web/Routes/Nested.hs
+++ b/src/Web/Routes/Nested.hs
@@ -84,7 +84,7 @@
 import           Network.Wai.Middleware.ContentType hiding (responseStatus, responseHeaders, responseData)
 
 import           Data.Trie.Pred.Base                (RootedPredTrie (..), PredTrie (..))
-import           Data.Trie.Pred.Base.Step           (PredStep (..), PredSteps (..))
+import           Data.Trie.Pred.Base.Step           (PredStep (..), Pred (..))
 import qualified Data.Trie.Pred.Interface           as Interface
 import           Data.Trie.Pred.Interface.Types     (Singleton (..), Extrude (..), CatMaybes)
 import           Data.Trie.HashMap                  (HashMapStep (..), HashMapChildren (..))
@@ -356,7 +356,7 @@
 lookupWithLPT :: ( Hashable s
                  , Eq s
                  ) => (s -> s) -> NonEmpty s -> PredTrie s a -> Maybe ([s], a)
-lookupWithLPT f tss (PredTrie (HashMapStep ls) (PredSteps ps)) =
+lookupWithLPT f tss (PredTrie (HashMapStep ls) (PredStep ps)) =
   getFirst $ First (goLit f tss ls)
           <> foldMap (First . goPred f tss) ps
 
@@ -379,99 +379,16 @@
           , Eq s
           ) => (s -> s)
             -> NonEmpty s
-            -> PredStep s PredTrie s a
+            -> Pred PredTrie s a
             -> Maybe ([s], a)
-goPred f (t:|ts) (PredStep _ predicate mx xs) = do
+goPred f (t:|ts) (Pred predicate mx xs) = do
   d <- predicate t
   if null ts
   then (([t],) . ($ d)) <$> mx
   else bimap (t:) ($ d) <$> lookupWithLPT f (fromList ts) xs
 
--- lookupWithLPT :: ( Eq k
---                  , Hashable k
---                  , Typeable s
---                  , Typeable k
---                  ) => PredSet s k
---                    -> (k -> k)
---                    -> NonEmpty k
---                    -> PredTrie k a
---                    -> ST s (Maybe a)
--- lookupWithLPT predSet f (k:|ks) (HashTableTrie raw preds) = do
---   mx <- HT.lookup raw $ if null ks then f k else k
---   case mx of
---     Just (RawValue mx' children) ->
---       case ks of
---         []       -> pure mx'
---         (k':ks') -> lookupWithLPT predSet f (k':|ks') children
---     Nothing ->
---       let -- go :: Typeable t => Maybe t -> PredStep s k t -> ST s (Maybe t)
---           go solution@(Just _) _                          = pure solution
---           go Nothing (MPT.PredStep predKey mHandler children) = do
---             mx' <- HS.lookup predKey k predSet
---             case mx' of
---               Nothing -> pure Nothing
---               Just x  ->
---                 case ks of
---                   [] ->
---                     pure $! ($ x) <$> mHandler
---                   (k':ks') -> do
---                     mf <- lookupWithLPT predSet f (k':|ks') children
---                     pure $! ($ x) <$> mf
---       in  foldlM go Nothing preds
 
--- lookupWithLPT :: ( Eq k
---                 , Hashable k
---                 , Typeable s
---                 , Typeable k
---                 ) => PredSet s k
---                   -> (k -> k)
---                   -> NonEmpty k
---                   -> HashTableTrie s k a
---                   -> ST s (Maybe (NonEmpty k, a, [k]))
--- lookupWithLPT predSet f (k:|ks) (HashTableTrie raw preds) = do
---   mLit <- goLit raw
---   case mLit of
---     Just _  -> pure mLit
---     Nothing ->
---       let go solution@(Just _) _ = pure solution
---           go Nothing pred        = goPred pred
---       in  foldlM go Nothing preds
---   where
---     goLit xs = do
---       mx' <- if null ks
---              then HT.lookup raw (f k)
---              else HT.lookup raw k
---       case mx' of
---         Nothing -> pure Nothing
---         Just (RawValue mx children) ->
---           let mFoundHere = (\x -> (k:|[], x, ks)) <$> mx
---               prependAncestry (pre,x,suff) = (k:|NE.toList pre,x,suff)
---           in case ks of
---             [] -> pure mFoundHere
---             (k':ks') -> do
---               mFoundThere <- MPT.match predSet (k':|ks') children
---               pure $! getFirst $
---                    First (prependAncestry <$> mFoundThere)
---                 <> First mFoundHere
---
---     goPred (MPT.PredStep predKey mx children) = do
---       mr' <- HS.lookup predKey k predSet
---       case mr' of
---         Nothing -> pure Nothing
---         Just r  ->
---           let mFoundHere = (\x -> (k:|[], x r, ks)) <$> mx
---               prependAncestryAndApply (pre,f,suff) =
---                 (k:|NE.toList pre,f r,suff)
---           in case ks of
---             [] -> pure mFoundHere
---             (k':ks') -> do
---               mFoundThere <- MPT.match predSet (k':|ks') children
---               pure $! getFirst $
---                    First (prependAncestryAndApply <$> mFoundThere)
---                 <> First mFoundHere
 
-
-
 {-# INLINEABLE lookupWithLPT #-}
 
 
@@ -480,36 +397,6 @@
                  ) => (s -> s) -> [s] -> RootedPredTrie s a -> Maybe ([s], a)
 lookupWithLRPT _ [] (RootedPredTrie mx _) = ([],) <$> mx
 lookupWithLRPT f ts (RootedPredTrie _ xs) = lookupWithLPT f (fromList ts) xs
-
--- lookupWithLRPT :: ( Eq k
---                  , Hashable k
---                  , Typeable s
---                  , Typeable k
---                  , Typeable a
---                  ) => (k -> k)
---                    -> [k]
---                    -> RootedHashTableTrie s k a
---                    -> ST s (Maybe ([k],a,[k]))
--- lookupWithLRPT _ [] (RootedHashTableTrie mx _ _) =
---   pure $! (\x -> ([],x,[])) <$> mx
--- lookupWithLRPT f (k:ks) (RootedHashTableTrie mx xs predSet) = do
---   mFoundThere <- lookupWithLPT predSet f (k:|ks) xs
---   pure $! getFirst $
---       First ((\(pre,x,suff) -> (NE.toList pre,x,suff)) <$> mFoundThere)
---    <> First ((\x -> ([],x,k:ks)) <$> mx)
-
--- lookupWithLRPT :: ( Eq k
---                   , Hashable k
---                   , Typeable s
---                   , Typeable k
---                   , Typeable a
---                   ) => (k -> k)
---                     -> [k]
---                     -> RootedHashTableTrie s k a
---                     -> ST s (Maybe a)
--- lookupWithLRPT _ [] (RootedHashTableTrie mx _ _) = pure mx
--- lookupWithLRPT f (k:ks) (RootedHashTableTrie _ xs predSet) =
---   lookupWithLPT predSet f (k:|ks) xs
 
 
 
