       (case (nth movement 0)
         :next (do
                 (swap! elems rest)
-                (vec (first @elems)))
+                (first (first @elems)))
         :seek (do
                 (swap! elems (fn [elems] (drop-while #((fn [a b] (lt a b)) (nth % 0) (nth movement 1)) elems)))
-                (vec (first @elems))))))) ;; TODO should seek consume the elem?
+                (first (first @elems)))))))
 
 (defn run-iterator-prop [min-keys actions movements]
   (let [tree (apply-to-tree (tree min-keys) actions)


(deftype Iterator [max-keys ^:mutable node ^:mutable ix ^:mutable end?]
  Object
  (next [this]
        (when (false? end?)
          (if (nil? (.-children node))

                            (nil? (.-children node))
                            (let [lower (.-upper (aget (.-children node) ix))]
                              (lt lower key)))
                      nil
                      (do
                        (set! node (aget (.-children node) ix))
                        (set! ix 0)
