simplify, add recursion, viola!