durations are now validated and never < 0, closes #352