Still got a misconnect between you & me.

:: From Mom

:: on pressing down again, program moves selection to first child if mom has children or moves to aunt if no children.
-- the code I posted does that, no?

:: if down is pressed again it moves selection to next child, or child children if it has any and so on.
-- the code I posted does that, no?

:: if down is pressed if at end of child, it moves to aunt or next parent
-- the code I posted does that, no?

So I guess the better question is what specific scenario failed with the posted code?

I'd have to recreate the tree to play with it, but I am assuming you already tried what I posted with a timer? If so, you will have also seen that when moving to an unexpanded node, the node self-expands.