Usando o PickList do PrimeFaces com JSF?

Estou tentando entender como funciona o pickList do PrimeFaces, mas até agora sem sucesso. Até tentei montar um Converter padrão para o tratamento que é ignorado.

Xhtml:

<p:pickList id="tencargos" 
	styleClass="form-control"
	value="#{tverbaBean.listTencargos}"
	var="listTencargos"
	converter="primeFacesPickListConverter"
	itemLabel="#{listTencargos.iEncargo}"
	itemValue="#{listTencargos}"
	showSourceControls="true" showTargetControls="true">
	<f:facet name="sourceCaption">Encargos Incidentes</f:facet>
	<f:facet name="targetCaption">Encargos Cadastrados</f:facet>
</p:pickList> 								

Converter:

@FacesConverter(value = "primeFacesPickListConverter") 
public class PrimeFacesPickListConverter implements Converter { 

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { 
	Object ret = null; 
	if (arg1 instanceof PickList) { 
		Object dualList = ((PickList) arg1).getValue(); 
		DualListModel dl = (DualListModel) dualList; 
		for (Iterator iterator = dl.getSource().iterator(); iterator 
				.hasNext();) { 
			Object o = iterator.next(); 
			String id = (new StringBuilder()).append( 
					((AbstractBean) o).getId()).toString(); 
			if (arg2.equals(id)) { 
				ret = o; 
				break; 
			} 
		} 

		if (ret == null) { 
			for (Iterator iterator1 = dl.getTarget().iterator(); iterator1 
					.hasNext();) { 
				Object o = iterator1.next(); 
				String id = (new StringBuilder()).append( 
						((AbstractBean) o).getId()).toString(); 
				if (arg2.equals(id)) { 
					ret = o; 
					break; 
				} 
			} 

		} 
	} 
	return ret; 
} 

public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { 
	String str = ""; 
	if (arg2 instanceof AbstractBean) 
		str = ((AbstractBean) arg2).getId().toString(); 
	return str; 
} 
} 

MB:

public DualListModel<Tencargos> getListTencargos() {

	// ENCARGOS INCIDENTES
	TencargosRN tencargosRN = new TencargosRN();
	
	String verifica = "N";
	encargosListaCarga = tencargosRN.listar();

	if (tverbas.getListTencargos() != null)
		encargosIncididos = this.tverbas.getListTencargos();

	for (Tencargos item : encargosListaCarga) {

		for (Tencargos incidido : encargosIncididos) {

			if (item.equals(incidido)) {
				verifica = "S";
				break;
			} else {
				verifica = "N";
			}
		}

		if (verifica.equals("N")) {

			encargosLista.add(item);

		}
	}

	listTencargos = new DualListModel<Tencargos>(encargosIncididos, encargosLista);

	return listTencargos;
}

Método Salvar:

public String salvar() {

	this.tverbas.setIdverba(tverbas.getIdverba());
	List<Tencargos> listaBanco = new ArrayList<Tencargos>();
	listaBanco = (List<Tencargos>) listTencargos.getSource();
	this.tverbas.setListTencargos(listaBanco);
	
	TverbasRN tverbasRN = new TverbasRN();
	tverbasRN.salvar(tverbas);

	return "listaVerbas";

}

Quando eu uso o converter explicitando na tag do picklist converter="primeFacesPickListConverter" ele não carrega nem o Source nem o target

Quando eu retiro, ele me dá simplesmente uma referência em memória:

E eu não consigo pega isso e jogar numa lista de objetos para que eu possa salvar no banco. Ele carrega perfeitamente em tela, esse não é o problema. O ponto é quando eu aciono o método salvar, no momento que preciso recuperar as listas.

Alguém sabe como funciona?

E seguindo o próprio tutorial do primefaces, não conseguiu?