All functions implemented
Untested