Modelagem para pagamento de planos

Oi pessoal!
Criei um sistema onde o cliente efetua pagamento para poder usar o serviço oferecido pelo site, o cliente escolhe o plano (30, 60 ou 90 dias) e efetua o pagamento no pagseguro.
O problema é quanto ao vencimento, como posso modelar estas classes para que exista uma forma de cobrar do cliente em determinadas datas e que em pagamentos efetuados antes da data de vencimento, esta data não seja alterada?

No momento tenho esta classes:

public class Cliente {
# atributos de cliente
@OneToOne
private Plano plano;
}

public class Plano {
private Integer codPlano;
private String nome;
private BigDecimal valor;
private String descricao;
}

public class Pagamento {
private BigDecimal valor;
private Cliente cliente;
@OneToOne
private Transacao transacao;
}

public class Transacao {
private Integer identificacao;
private Date dataRealizada;
private String status;
private String tipoPagamento;
@ManyToOne
private Pagamento pagamento;
}

A idéia é ter a mesma funcionalidade de planos de hospedagem encontrados na internet. O cliente escolhe um plano, paga e depois terá datas de vencimento, efetuando pagamento antecipado, a data de vencimento não é alterada.
Alguma dica?
Abraço!

Estava pensando em colocar um atributo “vencimento” na classe pagamento, e gerar um novo pagamento com data de vencimento calculada a partir do pagamento do cliente.

public class Pagamento {
private BigDecimal valor;
private Date vencimento;
private Cliente cliente;
@OneToOne
private Transacao transacao;
}

Exemplo: Se o cliente efetuar o primeiro pagamento dia 15, esta será a sua data de vencimento, portanto o cálculo será sempre adicionar um mês à esta data.
Pagamento atual: 15/08/2011
Próximo vencimento:15/09/2011

Se o cliente pagar dia 13/09/2011, eu verifico o mês do vencimento e comparo com o mês de pagamento, sendo em setembro, o cliente estará pagamento a sua mensalidade sem alterar a data de vencimento que é dia 15. Gravo o pagamento referente ao mês de setembro e gero um novo pagamento em aberto para vencimento em 15/10/2011 com status “pendente”.
O que acham? Alguma sugestão pessoal?
Abraço!