added recursion
added more stuff