better explanation of functions