implement required methods