refactor completo, y funcionando