Implementando itens 4, 5, e 6

Falta procurar por bugs escondidos e terminar a documentação.
Caso tenha tempo, otimizar.