self-reproducing function