       (case (nth movement 0)
         :next (do
                 (swap! cur-elems rest)
-                (or (first (first @cur-elems)) (first (last elems))))
+                (first (first @cur-elems)))
         :seek (do
                 (reset! cur-elems (drop-while #(key-lt (nth % 0) (nth movement 1)) elems))
-                (or (first (first @cur-elems)) (first (last elems))))))))
+                (first (first @cur-elems)))))))
 
 (defn run-iterator-prop [min-keys key-len actions movements]
   (let [tree (apply-to-tree (tree min-keys key-len) actions)

(defn iterator-prop [key-len]
  (prop/for-all [min-keys gen/s-pos-int
                 actions (gen/vector (gen-action key-len))
                 movements (gen/vector (gen-movement key-len))]
                (run-iterator-prop min-keys key-len actions movements)))

(defn run-self-join-prop [min-keys key-len actions movements]

(defn self-join-prop [key-len]
  (prop/for-all [min-keys gen/s-pos-int
                 actions (gen/vector (gen-action key-len))
                 movements (gen/vector (gen-seek key-len))]
                (run-self-join-prop min-keys key-len actions movements)))

(defn run-product-join-prop [min-keys key-len actions movements]
