raise errors instead of returning false when pre-condition fails