contents can be falsy (empty string). Fixes #32