Big refactor.
Trabalho incompleto.