finish all required functionalities