use lazy val and make slightly nicer