Muchos cambios. Practicamente reescribí el código.