rework intro; abstract; til recursion