Let's see how it performs on a structure that is naturally recursive: ; Binary tree left: 1 node: 2 right: 3 insert: func [tree item][ any [ all [tree = [] reduce [[] item []]] all [ item < tree/:node reduce [insert tree/:left item tree/:node tree/:right] ] reduce [tree/:left tree/:node insert tree/:right item] ] ] >> tree: [] >> for n 1 140 1 [tree: insert tree n] Invalid data type during recycle ** Press enter to quit. Ooops, fails when tree gets about 140 levels deep. But: >> tree: [] >> for n 1 20000 1 [tree: insert tree random 100000] == [[[[[[[[[[[[[[] 2 [[] 4 []]] 20 []] 35 [[[] 50 [[] 51 []]] 65 []]] 66 [[[[[] 72 [[] 81 []]] 82 []] 95 [[] 97 []]] 99 [[] 100 []]... So as long as you keep them balanced it can handle quite a lot! 140 levels can hold maximum 2^139 + 2^138 + ... + 2^0 elements... I think running out of memory is a bigger problem than running out of stack space ! :)) Gisle