                              (rf result input)
                              result)]
                 (if (not (pos? nn))
-                  (reduced result)
+                  (ensure-reduced result)
                   result)))))))
   ([n coll]
      (lazy-seq

                           (let [v (vec (.toArray a))]
                             ;;clear first!
                             (.clear a)
                             (rf result v)))]
              (rf result)))
         ([result input]
            (.add a input)

                             (let [v (vec (.toArray a))]
                               ;;clear first!
                               (.clear a)
                               (unreduced (rf result v))))]
                (rf result)))
           ([result input]
              (let [pval @pa
