Starting to implement this
All interface defined
Implemented (not tested)