First shot at required and optional properties to make up for a nicer API