adding require recursion