Required and optional properties

First rough attempt, please review.