Rather Generics.Collections. The preferred way for large code base is separate .inc, maybe generics.treesh.inc (interface) and generics.trees.inc (implementation) like for dictionaries. Interface of TAVLTree can be changed in the future in the case when Delphi also implements it (so AVLTree tree must be marked as experimental). Be aware that Integration isn't sure so 3rd library might be also good idea (can be integrated in any time, when will be finished).