Added recursive traversing, untested