Implementação com base na classe oferecida pelo Fabio commit 1