add feature recursion