required function