complete all functionalities