Add experimental non-recursive version