         (aset pinned-key moving-key-ix greatest))
       (.maintain this))
   (mark [this]
-        (.mark iterator))
+        (.mark iterator)
+        (apush marked-seek-keys seek-key)
+        (apush marked-pinned-keys pinned-key))
   (reset [this]
-         (.reset iterator)))
+         (.reset iterator)
+         (set! seek-key (.pop marked-seek-keys))
+         (set! pinned-key (.pop marked-pinned-keys))
+         (.maintain this)))
 
 (defn trieterator [iterator]
-  (let [trieterator (Trieterator. iterator (least-key (.-key-len iterator)) (greatest-key (.-key-len iterator)) 0 false (.-key-len iterator))]
+  (let [trieterator (Trieterator. iterator (least-key (.-key-len iterator)) (greatest-key (.-key-len iterator)) #js [] #js [] 0 false (.-key-len iterator))]
     (.maintain trieterator)
     trieterator))
 

                 movements (gen/vector (gen-next key-len))] ;; TODO use gen-movement once Treeterator supports seek
                (run-self-join-prop min-keys key-len actions movements)))

(comment
  (dc/quick-check 1000 (least-prop 1))
  (dc/quick-check 1000 (least-prop 2))

      (recur (aget (.-children node) 0)))))

;; trie view of a tree
(deftype Trieterator [iterator ^:mutable seek-key ^:mutable pinned-key marked-seek-keys marked-pinned-keys ^:mutable moving-key-ix ^:mutable end? key-len]
  Object
  (key [this]
       (when (false? end?)
