non-required values are pointer when needed