AddDurationToOrSubtractDurationFromPlainYearMonth should probably call GetOptionsObject earlier to validate the user-supplied input before performing other user-visible operations. Maybe move it directly before the BalanceTimeDuration call in step 3?