Multiples cambios y mejoras, se ha comentado el código.