Option 2) turns out to be not that simple because LINKED_TREE exposes too much internal details, e.g. it allows for adding subtrees directly, whereas LINKED_LIST allows for adding values, but not list elements that hold values. There are some other options as well: 3) exclude the classes from the base library (unless they are used somewhere); 4) add new cursor types, e.g. LINKED_TREE_ITERATION_CURSOR that would inherit from both LINKED_LIST_ITERATION_CURSOR and TREE_ITERATION_CURSOR. Option 3) seems to be most efficient, but it may break projects that rely on the classes. As to option 4), it's unclear, whether it is feasible - it may lead to some issues (such as CAT-calls) caused by repeated inheritance and redeclarations.