refactorizado y comentado