One thing can happen in Internet Explorer if a user chooses 'open in new window' is that the new windows gets the same session id as the original windows. These windows would then be going after the same managed beans. There are many situations where this can wreak havoc unless you handle it.
This is a extremely annoying shortfall in the JSF specification, making immediate=true fields incompatible with validation. Unfortunately it is 'as per specification'. As a consequence I tend to only use immediate=true if I have no validation, or for cancel buttons.
One thing I have used in place of immediate=true is an Ajax call to refresh the other elements when a list box is selected.
There are many options and frameworks to make the Ajax/JSF call, and have Ajax communicate with your backing bean in a JSF compatible way.
A phase listener is a type of plug in to allow you application to be invoked during the java server faces request life cycle. You can invoke custom processing before or after a particular phase. Here is a sample that is invoked before and afetr the RESTORE_VIEW lifecycle stage.