avoiding boilerplate