Reasoning with Optional and Preferred Requirements