all functionalities implemented