Duvida, gerenciar Session´s do Hibernate

Bom dia pessoal,
Alguem tem uma dica de como eu posso proceder para o gerenciamento de sessões do Hibernate para os clientes da minha aplicação.
No meu caso eu tenho a classe HibernateUtil que retorna da factory um objeto Session aberto, logo toda a vez que necessite de uma Session eu tenho que chamar a classe e após usar eu tenho que fechar esta session aberta.
Em alguns momentos, quando eu tentava alterar algum registro na aplicação grafica, uma exception era lançada dizendo que o objeto estava sendo referenciado em outra sessão.
Alguem tem uma dica de como eu posso tratar esse problema de uma maneira organizada.

Agradeço qualquer ajuda. Abraços.

Esqueci de postar o que eu estava fazendo para gerenciar as Session´s correntes na aplicação.

public boolean remove(IJavaBean objeto)throws RemoteException {
		Transaction transaction = null;
		try {
			setSession(openSession());
			transaction = getSession().beginTransaction();

			if( objeto.getIdentificador() != null || objeto.getIdentificador() > 0){
				getSession().delete(objeto);
				transaction.commit();
			}else
				return false;
		} catch (Exception e) {
			if(transaction != null)
				transaction.rollback();
			throw new HibernateDaoException("Method: REMOVE, Erro: " + e.getLocalizedMessage());
		} finally {
			getSession().flush();
			getSession().close();
		}
		return true;
}

// 
public Session openSession(){
		if(getSession() == null || !(getSession().isOpen()))
			return HibernateUtil.getSession();
		else
			return getSession();
	}

O Hibernate já inclui esse recurso:

[code]SessionFactory factory = //obter factory

Session sessao = factory.getCurrentSession();[/code]

http://www.hibernate.org/hib_docs/v3/api/org/hibernate/SessionFactory.html#getCurrentSession()

Em jair, o meu codigo de exemplo para o metodo remove está correto, na forma de limpeza e fechamento de sessões?

Sim, a principio não vejo nada de errado.