          (mapcat tag-fn))))
 
 
-(defn mk-lazy-sibling-tag-seq [])
-(defn mk-lazy-ancestor-tag-seq [])
+(defn mk-lazy-sibling-tag-seq
+  [node tag-fn dist]
+  (let [generations-seq (->> node
+                             :zipper
+                             all-sib-zips)
+        g-seq (if dist
+                (take dist generations-seq)
+                generations-seq)]
+    (->> g-seq
+         (map z/node)
+         (mapcat tag-fn))))
+
+(defn mk-lazy-ancestor-tag-seq
+  [node tag-fn dist]
+  (let [generations-seq (->> node
+                             :zipper
+                             ancestor-zips)
+        g-seq (if dist
+                (take dist generations-seq)
+                generations-seq)]
+    (->> g-seq
+         (map z/node)
+         (mapcat tag-fn))))
 
 (defn mk-relative-final-qry-fn
   [opts tag-set & [dist]]

              (children-zips-by-generation kids)))
    nil))

(defn mk-lazy-descendant-tag-seq
  [node tag-fn dist]
  (def n' node)
  (def tag-fn' tag-fn)
  (def d' dist)
  (let [generations-seq (->> node
                             :zipper
                             children-zips-by-generation)

  (->> z
       (iter-while-identity z/up)
       rest))

(defn children-zips [zipr]
  (some->> zipr
