optional keys can be optionally nil