implement required functions