First draft

This is the first draft for the class. It is still not tested.
Tested First Draft

All the mandatory methods are implemented. A refactoring, some issues
fixing, and more tesiting are needed.