Dúvida IceFaces

estou construindo uma pagina com icefaces em que tem dois componentes ice:selectOneListbox… um deles precisa de partialsubmit para popular campos de outputtext e o outro nao precisa de partialsubmit porque seu valor somente será buscado depois de clicar em salvar…

seguem os exemplos:

tela.jspx

<td class="style15" align="left">
     <ice:outputText value="#{msg['projeto.label.empresa']}" />
</td>
<td class="style15" align="left">
    <ice:selectOneMenu	id="SelectEmpresa" styleClass="select" style="overflow: auto;width: 160px;" value="#{projetoBean.selectedEmpresa}">	
          <f:selectItems value="#{projetoBean.empresasAll}" />
    </ice:selectOneMenu>
</td>

<td class="style15" align="left">
     <ice:outputText value="#{msg['projeto.label.estacao']}" />
</td>
<td class="style15" align="left">
     <ice:selectOneListbox id="SelectEstacao" size="5" styleClass="select" style="overflow: auto;width: 160px;" rendered="true" immediate="true" value="#{projetoBean.selectedEstacao}" partialSubmit="true" valueChangeListener="#{projetoBean.alteraEstacaoSelecionada}"
           <f:selectItems id="slLocalidade" value="#{projetoBean.estacoesAll}" />
      </ice:selectOneListbox>
</td>

bean


private EmpresaFacade empresaFacade;
private EstacaoFacade estacaoFacade;

private SelectItem[] empresasAll;
private SelectItem[] estacoesAll;

private Integer selectedEmpresa;
private Long selectedEstacao;



public SelectItem[] getEmpresasAll() {
	try {
		SelectItem elem;	
		if (empresasAll == null) {
			List empresasList = empresaFacade.getEmpresasAtivas();			
			if (empresasList.size() > 0) {
				int i = 0;
				empresasAll = new SelectItem[empresasList.size()];
				Iterator iterator = empresasList.iterator();
				while (iterator.hasNext()) {
					Empresa empresa = (Empresa) iterator.next();
					elem = new SelectItem(empresa.getCodigo(), empresa
							.getNome());
					empresasAll[i] = elem;
					i++;
				}
			}
		}	
	} catch (Exception e) {
		FacesMessage f = new FacesMessage(
				"Erro ao listar todos as empresas  " + e.getMessage());
		FacesContext.getCurrentInstance().addMessage("", f);
		e.printStackTrace();
		return null;
	}
	return empresasAll;
}	

/* A logica do codigo para getEstacoesAll() é igual ao de getEmpresasAll() */

public void alteraEstacaoSelecionada(ValueChangeEvent event){		
	this.selectedEstacao = (Long) event.getNewValue();		
	this.populaEstacao();		
}

private void populaEstacao() {
	if (selectedEstacao != null) {
		this.setEstacaoSge(this.estacaoFacade.getEstacao(this.selectedEstacao));
	}				
}

No codigo acima, quando altera alguma empresa no selectonelistbox, nada acontece com a tela, o que está correto… porém quando altera alguma estação, toda a tela é carregada novamente, inclusive as empresas…

alguem pode me ajudar? outra pergunta… sempre quando carrega a tela ou quando eu seleciono alguma opcao em estacao, os codigos de getEmpresasAll() e getEstacoesAll() são executados 2 vezes cada um… por que?