If you have conditional panels (panels with conditions attached) and those panels are not going to be displayed, then the installer may invoke the isValidated method of the current panel multiple times. With a panel like TargetPanel followed by conditional panels, the popup that informs the user that the target directory will be created is shown multiple times. The logic in "navigateNext" method uses recursion is "canShow" returns 'false". Recursion is not really needed here. What is needed is to find out if there is a "next" panel that can be displayed depending on the current conditions for the successive panels.
In my case, I have a panel is conditional depending on the OS of the platform being installed on. These panels are after the TargetPanel, and when the first panel after the target panel is going to be skipped, the warning that the TargetPanel pops up is displayed twice.
In looking over the code to provide a patch, I see that "IzPanel" has a "hidden" property and that this property is used in "visiblePanelMapping" to figure out the panel steps and also to see if a panel is going to be visible. I cannot find any code that that ever calls "IzPanel.setHidden". This also seems a little flawed in that you can have panels displayed depending on the conditions that are associated with the panel. These conditions can be dynamic based on things that occurred earlier in the installer steps, so I don't see how this will ever be 100% accurate.
I have a patch that I am testing for the "navigateNext" that will not cause the "isValidate" to be called multiple times, but it will not fix the panel steps problem.
Note that this patch is not against the latest version in the trunk as that has changed a bit since I pulled out the code.