If this is all done in a Play plugin you can avoid the lazy vals and do it eagerly, which has the advantage of failing immediately on bad config. I assume the lazy is to wait for Play.current to exist.

The getOrElse stuff is just broken IMO, if the config isn't present it's appropriate to give up and throw sys.error("your installation is fucked") ... which is what happens by default if you avoid Play's wrapper around com.typesafe.config.Config and just use the original API. Defaults should be in reference.conf and not copied elsewhere.