implemented all functionalities required, without unit tests