Refactor + Tests

No lo he revisado a fondo por las prisas. Échale un ojo antes de mergear ;)