Wo siehst Du in dem geposteten Code eine Rekursion? Dass die globalen Variablen alles andere als schön sind, wurde ja bereits gesagt und eine Alternative von mir gezeigt.
"Muss" ich es ändern oder nicht? Ich brauche globale Variablen, ansonsten, soviel könnt ihr mir ruhig zutrauen, würde ich sie nicht verwenden (ich finde ebenfalls, sie machen einen Quelltext extrem unübersichtlich, aber manchmal kommt man nicht, oder nur über erhebliche umwege, um sie herum).
Mir ist außerdem nicht bewusst, warum NewPanel bzw. PanelsList Probleme machen sollte, sie werden doch nirgendwo sonst vom Compiler belegt oder definiert.