implement missing functionalities