more practical boilerplate