Implement almost the full functionality
Implement unit tests