adding functional boilerplate