added optional depth limit parameter