Maybe I'm missing something but I do nothing to drive it more complicated than it has to be. The children are stored into plain array lists, I use nothing fancy. However, note that they are drawn in the reverse order except if you use a delegate.