        (reify IProjection
          (-project [this target enqueue-fn]
            (let [pproj (OffsetProjection. offset target nil)]
-             (target-init target pproj)
-             (project proj pproj enqueue-fn)))))
+             (set! (.-source pproj) (project proj pproj enqueue-fn))
+             pproj))))
 
      (deftype LimitProjection [offset source target]
        Object

    (target-remove this 0)))

(defprotocol IProjection
  (-project [this target enqueue-fn]))

(defn project [projection target enqueue-fn]
  (-project projection target enqueue-fn))

(defn source-pull [this idx] (-source-pull this idx))

(defprotocol IProjectionTarget
  (-target-insert [this projected-elem before-idx])
  (-target-peek [this elem-idx])
  (-target-take [this elem-idx])
  (-target-count [this])
  (-target-move [this elem-idx before-idx]))

(defn target-insert [this elem before-idx] (-target-insert this elem before-idx))

(defn target-peek [this idx] (-target-peek this idx))
