Modificado para melhorar implementação