Primefaces picklist comportamento estranho(desafio)

Boa tarde pessoal,

vou passar uma desafio para vcs, e consequentemente resolver o meu problema, hehehe

Olha soh, tenho um formulario em uma modal, e nesse formulario, existem campos e um picklist

Passo 1. Quando clico na listagem e abre a modal, com o formulario preenchido e a picklist coms os registros corretos em cada lado

Passo 2. Quando abro o formulario para inserir, que é o mesmo da modal que visualizo, so que vazio e clico no botao salvar ele faz as validações dos campos not null, isso tudo esta 100%
Mas quando volto ao passo 1, o picklist nao esta preenchido corretamente, como no passo 1 estava.

Abaixo e anexo, segue o codigo das classe e telas, caso necessario me peçam mais informações

Converter

@SuppressWarnings("unchecked")
	@Override
	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		Class<?> clazz = null;
		GenericFacade facade = null;
		
		InitialContext iniCtx;
		try {
			iniCtx = new InitialContext();
			facade = (GenericFacade) iniCtx.lookup("java:module/GenericService");
		} catch (NamingException e) {
			// TODO ver como controlar a exception
			e.printStackTrace();
		}
		
		if (component instanceof PickList) {
			PickList pickList = (PickList) component;
//			String[][] submittedValues  = (String[][])pickList.getSubmittedValue();
			Object dualList = pickList.getValue();
			DualListModel<AbstractEntity> dl = (DualListModel<AbstractEntity>) dualList;
			for (Object o : dl.getSource()) {
				clazz = o.getClass();
	        }
			for (Object o : dl.getTarget()) {
				clazz = o.getClass();
			}
		}
		
		facade.setEntityClass(clazz);
		Object annotationFieldValue = ReflectionUtil.getAnnotationValue(
				clazz, Selecionavel.class, "field");
		
		if (annotationFieldValue == null) {
			return null;
		}
		//Busca o nome do campo que é visualizado no combo
		String fieldName = annotationFieldValue.toString();
		AbstractEntity entity = facade.findUniqueByField(fieldName, value);
		return entity;
	}

	
	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		
		if (value == null) {
			return "";
		}
		if (value instanceof String) {
			return (String) value;
		}
		if (value != null && !(value instanceof AbstractEntity)) {
			throw new IllegalArgumentException(
					"This converter only handles instances of AbstractEntity");
		}
		
		
		String fieldName = ReflectionUtil.getAnnotationValue(
				Hibernate.getClass(value), Selecionavel.class, "field").toString();
		
		String result = (String) ReflectionUtil.getFieldValue(value, fieldName);
		return result;
	}[/code]

[code]
public abstract class BasicCrudController<T extends AbstractEntity<ID>, 
											F extends AbstractSearchEntity, 
											S extends BasicCrudFacade<T, F, ID>,
											ID extends Serializable> extends BasicIncludeController<T, S, ID> 
																					implements Serializable {
......
public void viewSearchPart(ActionEvent e) {
		initialStateSearch();
	}
[/code]

[code]@ManagedBean
@ViewScoped
public class UsuarioController extends
		TrilhaAuditoriaCrudController<Usuario, UsuarioSearch, UsuarioLocalFacade, Integer> implements Serializable {

@Override
	protected void initialStateForm() { // limpa o formulário da modal
		inicializaPickList();

		this.setUsuario(new Usuario());
		this.setConfirmarEmail("");
		this.setConfirmarSenha("");
	}

private void inicializaPickList() {
		this.setEmpresas(new DualListModel<Empresa>(this.getEmpresaService().listAll(), new ArrayList<Empresa>()));
		this.setPerfis(new DualListModel<Perfil>(this.getPerfilService().listAll(), new ArrayList<Perfil>()));
	}
@Override
	public void selectItem() { // quando um registro é marcado para alteração no
								// grid
		super.selectItem();

		if (this.getUsuario().getId() == null || this.getUsuario().getId() == 0) {
			this.setConfirmarEmail("");
			this.setConfirmarSenha("");
		} else {
			this.setConfirmarEmail(this.getUsuario().getEmailUsuario());
			this.setConfirmarSenha(this.getUsuario().getSenhaUsuario());
		}

		preencheListEmpresas();
//		onChangeRow();
	}
private void preencheListEmpresas() {
		inicializaPickList();
		List<Empresa> listEmpresas = new ArrayList<Empresa>();

		for (UsuarioEmpresa usuarioEmpresa : this.getBean().getUsuariosEmpresas()) {
			listEmpresas.add(usuarioEmpresa.getEmpresa());
//			removeEmpresaDaLista(usuarioEmpresa);
		}

		this.getEmpresas().getSource().removeAll(listEmpresas);
		this.getEmpresas().getTarget().addAll(listEmpresas);
		
		if (!listEmpresas.isEmpty()) {
			this.empresaSelected = listEmpresas.get(0);
		}

//		this.empresas.setTarget(listEmpresas);
	}
......