Make default values optional.
Refactored fields slightly and extracted common field specs.