diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.1.0.6
+
+* fix bug in depth-first search
+
 0.1.0.5
 
 * change the search functions in `TagTreePosStateT` to use `Maybe` instead of `Bool`
diff --git a/src/Text/HTML/TagSoup/Navigate/Types/TagTreePosState.hs b/src/Text/HTML/TagSoup/Navigate/Types/TagTreePosState.hs
--- a/src/Text/HTML/TagSoup/Navigate/Types/TagTreePosState.hs
+++ b/src/Text/HTML/TagSoup/Navigate/Types/TagTreePosState.hs
@@ -360,23 +360,23 @@
 findTreeT ::
   Monad f =>
   TagTreePosStateT str f a
-  -> TagTreePosStateT str f b
-  -> (TagTree str -> f (Maybe x))
-  -> TagTreePosStateT str f x
+  -> TagTreePosStateT str f a
+  -> (TagTree str -> f (Maybe a))
+  -> TagTreePosStateT str f a
 findTreeT s1 s2 pr =
   do  c <- liftTagTreePosState content
       z <- lift (pr c)
       case z of
         Nothing ->
-          (s1 *> breadthFirstFindTreeT pr) <|> (s2 *> breadthFirstFindTreeT pr)
+          s1 <|> s2
         Just x ->
           pure x
   
 findTree ::
   TagTreePosState str a
-  -> TagTreePosState str b
-  -> (TagTree str -> Maybe x)
-  -> TagTreePosState str x
+  -> TagTreePosState str a
+  -> (TagTree str -> Maybe a)
+  -> TagTreePosState str a
 findTree s1 s2 pr =
   findTreeT s1 s2 (Identity . pr)
 
@@ -384,8 +384,8 @@
   Monad f =>
   (TagTree str -> f (Maybe x))
   -> TagTreePosStateT str f x
-depthFirstFindTreeT =
-  findTreeT (liftTagTreePosState firstChild) (liftTagTreePosState nextSibling)
+depthFirstFindTreeT pr =
+  findTreeT (liftTagTreePosState firstChild *> depthFirstFindTreeT pr) (liftTagTreePosState nextSibling *> depthFirstFindTreeT pr) pr
 
 depthFirstFindTree ::
   (TagTree str -> Maybe x)
@@ -397,8 +397,8 @@
   Monad f =>
   (TagTree str -> f (Maybe x))
   -> TagTreePosStateT str f x
-breadthFirstFindTreeT =
-  findTreeT (liftTagTreePosState nextSibling) (liftTagTreePosState firstChild)
+breadthFirstFindTreeT pr =
+  findTreeT (liftTagTreePosState nextSibling *> breadthFirstFindTreeT pr) (liftTagTreePosState firstChild *> breadthFirstFindTreeT pr) pr
 
 breadthFirstFindTree ::
   (TagTree str -> Maybe x)
diff --git a/tagsoup-navigate.cabal b/tagsoup-navigate.cabal
--- a/tagsoup-navigate.cabal
+++ b/tagsoup-navigate.cabal
@@ -1,5 +1,5 @@
 name:                 tagsoup-navigate
-version:              0.1.0.5
+version:              0.1.0.6
 synopsis:             Tagsoup Navigate
 description:          Lenses and data types for navigating tagsoup
 license:              BSD3
