Added ADT's and recursion