Refactoring

* Added supplant function
* Added doc comments
* Improved naming
* Added defaults to sing()